Питон и "ре" - PullRequest
       37

Питон и "ре"

6 голосов
/ 16 сентября 2008

В учебнике, посвященном Regex на python, объясняется, как использовать модуль re в python. Я хотел извлечь URL из тега A, поэтому, зная Regex, я написал правильное выражение и протестировал его в своем приложении для тестирования regex и гарантировал, что это сработало. При помещении в питон это не удалось.

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

regex = ".*(a_regex_of_pure_awesomeness)"

в

regex = "a_regex_of_pure_awesomeness"

Хорошо, это стандартное регулярное выражение URL, но я хотел избежать потенциальной путаницы в том, от чего я хотел избавиться, и, возможно, притвориться забавным.

Ответы [ 4 ]

20 голосов
/ 16 сентября 2008

В Python существует различие между «соответствием» и «поиском»; Функция match ищет только шаблон в начале строки, а поиск ищет шаблон, начинающийся в любом месте строки.

Документы Python Regex
Сравнение с поиском

4 голосов
/ 17 сентября 2008
from BeautifulSoup import BeautifulSoup 

soup = BeautifulSoup(your_html)
for a in soup.findAll('a', href=True):
    # do something with `a` w/ href attribute
    print a['href']
3 голосов
/ 16 сентября 2008
>>> import re
>>> pattern = re.compile("url")
>>> string = "   url"
>>> pattern.match(string)
>>> pattern.search(string)
<_sre.SRE_Match object at 0xb7f7a6e8>
1 голос
/ 16 сентября 2008

Используете ли вы метод re.match() или re.search()? Насколько я понимаю, re.match() предполагает "^" в начале вашего выражения и будет искать только в начале текста, тогда как re.search() действует больше как регулярные выражения Perl и будет соответствовать только началу текст, если вы включите "^" в начале вашего выражения. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...