Найти - Пользователи
Полная версия: Построение регулярного выражения
Начало » Python для новичков » Построение регулярного выражения
1
Moi5es
Есть строчка "<!– find rare characters in the mess below: –>
<!–
%%$@_$^__#)^)&!_+]!*@&^}@v()%+$&!&_#)_*}{}}!}_]$[%}@[{_@#_^{*
@##&{#&{&)*%(]{{([*}@+!!*{)!}{%+{))])a#{*+^((@^@}$[**$&^{$!@#$%)!@(&
–>"

Стоит задача выбрать из этой сточки только буквы (буквы выделил, чтобы их было видно). Помогите, пожалуйста, а то уже могз кипит.
FishHook
s = '''<!–
%%$@_$^__#)^)&!_+]!*@&^}@v()%+$&!&_#)_*}{}}!}_]$[%}@[{_@#_^{*
@##&{#&{&)*%(]{{([*}@+!!*{)!}{%+{))])a#{*+^((@^@}$[**$&^{$!@#$%)!@(&
–>'''
print re.findall("[a-z]", s)
Moi5es
А как быть, если мне нужно вытащить эти строчки с исходного кода страницы? Т.е. исходные символы будут известны после запроса страницы и находиться между символами <!–-строчка_с_буквами-–>"
bs0d
пример исходного кода страницы?
Moi5es
<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#{*+^((@^@}$[**$&^{$!@#$%)!@(&
-–>"
py.user.next
Нужно выделить сначала тот фрагмент, в котором собрался искать.
Moi5es
Вот мой итоговый скрипт:
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:”.
py.user.next
Moi5es
Вот мой итоговый скрипт:
Похоже, нужно взять все комментарии, из полученного списка убрать ненужные, а потом в оставшихся искать то, что надо.
Moi5es
А просто исключить строчку из списка не получится, типа это надо
<!–-
%%$@_$^__#
…, а это
<!–- find rare characters in the mess below: -–>
- нет


Думал, всю операцию можно проделать в одно действие, а оказалось не всё так просто:
1. взять весь исходны код
2. выделить из него все комментарии
3. из комментариев выделить нужную часть (удалить лишний комментарий)
4. в оставшейся части найти то, что нужно
py.user.next
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']
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB