Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 15, 2014 13:29:17

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение регулярного выражения

Есть строчка "<!– find rare characters in the mess below: –>
<!–
%%$@_$^__#)^)&!_+]!*@&^}@v()%+$&!&_#)_*}{}}!}_]$[%}@[{_@#_^{*
@##&{#&{&)*%(]{{([*}@+!!*{)!}{%+{))])a#{*+^((@^@}$[**$&^{$!@#$%)!@(&
–>"

Стоит задача выбрать из этой сточки только буквы (буквы выделил, чтобы их было видно). Помогите, пожалуйста, а то уже могз кипит.

Офлайн

#2 Окт. 15, 2014 13:35:14

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Построение регулярного выражения

s = '''<!–
%%$@_$^__#)^)&!_+]!*@&^}@v()%+$&!&_#)_*}{}}!}_]$[%}@[{_@#_^{*
@##&{#&{&)*%(]{{([*}@+!!*{)!}{%+{))])a#{*+^((@^@}$[**$&^{$!@#$%)!@(&
–>'''
print re.findall("[a-z]", s)



Офлайн

#3 Окт. 15, 2014 13:48:21

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение регулярного выражения

А как быть, если мне нужно вытащить эти строчки с исходного кода страницы? Т.е. исходные символы будут известны после запроса страницы и находиться между символами <!–-строчка_с_буквами-–>"

Офлайн

#4 Окт. 15, 2014 14:34:22

bs0d
Зарегистрирован: 2014-02-01
Сообщения: 76
Репутация: +  2  -
Профиль   Отправить e-mail  

Построение регулярного выражения

пример исходного кода страницы?

Офлайн

#5 Окт. 15, 2014 14:37:23

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение регулярного выражения

<html>
<head>
<title>111</title>
<link rel=“stylesheet” type=“text/css” href=“../style.css”>
</head>
<body>

<br>
<br>
<br>

<font size=“-1” color=“gold”>
General tips:
</body>
</html>

<!–- find rare characters in the mess below: -–>

<!–-
%%$@_$^__#)^)&!_+]!*@&^}@v()%+$&!&_#)_*}{}}!}_]$[%}@[{_@#_^{*
@##&{#&{&)*%(]{{()a#{*+^((@^@}$[**$&^{$!@#$%)!@(&
-–>"

Отредактировано Moi5es (Окт. 15, 2014 14:38:12)

Офлайн

#6 Окт. 16, 2014 02:20:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Построение регулярного выражения

Нужно выделить сначала тот фрагмент, в котором собрался искать.



Отредактировано py.user.next (Окт. 16, 2014 09:17:42)

Офлайн

#7 Окт. 16, 2014 08:27:54

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение регулярного выражения

Вот мой итоговый скрипт:

import urllib.request, re
url = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/ocr.html")
ocr = url.read().decode('utf-8')
pattern1 = '''<!--\D*(?!find rare characters in the mess below:)-->'''
scan1 = re.search(pattern1, ocr)
result1 = scan1.group()
#print (scan1.group())
pattern2 = '[a-zA-Z]'
scan2 = re.findall(pattern2, result1)
print (scan2)

Подскажите, пожалуйста, как исключить строчку “find rare characters in the mess below:”.

Офлайн

#8 Окт. 16, 2014 09:20:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Построение регулярного выражения

Moi5es
Вот мой итоговый скрипт:
Похоже, нужно взять все комментарии, из полученного списка убрать ненужные, а потом в оставшихся искать то, что надо.



Офлайн

#9 Окт. 16, 2014 10:05:03

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение регулярного выражения

А просто исключить строчку из списка не получится, типа это надо

<!–-
%%$@_$^__#
…, а это
<!–- find rare characters in the mess below: -–>
- нет


Думал, всю операцию можно проделать в одно действие, а оказалось не всё так просто:
1. взять весь исходны код
2. выделить из него все комментарии
3. из комментариев выделить нужную часть (удалить лишний комментарий)
4. в оставшейся части найти то, что нужно

Отредактировано Moi5es (Окт. 16, 2014 10:10:59)

Офлайн

#10 Окт. 16, 2014 23:42:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Построение регулярного выражения

Moi5es
Думал, всю операцию можно проделать в одно действие
В питоне несколько действий можно записать в одном выражении. Главное, не забыть включить нужные действия.
>>> import re
>>> 
>>> text = """
... <html>
... <head>
... <title>111</title>
... <link rel="stylesheet" type="text/css" href="../style.css">
... </head>
... <body>
... 
... <br>
... <br>
... <br>
... 
... <font size="-1" color="gold">
... General tips:
... </body>
... </html>
... 
... <!-- find rare characters in the mess below: -->
... 
... <!--
... %%$@_$^__#)^)&!_+]!*@&^}@v()%+$&!&_#)_*}{}}!}_]$[%}@[{_@#_^{*
... @##&{#&{&)*%(]{{()a#{*+^((@^@}$[**$&^{$!@#$%)!@(&
... -->
... """
>>> 
>>> lst = re.findall(r'<!--.*?-->', text, re.S)[1:]
>>> out = re.findall(r'[a-zA-Z]', ''.join(lst))
>>> out
['v', 'a']
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version