В учебнике, который у меня есть по Regex в python, объясняется, как использовать модуль re в python, я хотел получить URL-адрес из тега A, поэтому, зная Regex, я написал правильное выражение и протестировал его в своем выбранном приложении для тестирования регулярных выражений и обеспечил его работал. При размещении в Python это не удалось.
После долгого почесывания головы я обнаружил проблему, он автоматически ожидает, что ваш узор будет в начале строки. Я нашел исправление, но хотел бы знать, как его изменить:
regex = ".*(a_regex_of_pure_awesomeness)"
в
regex = "a_regex_of_pure_awesomeness"
Хорошо, это стандартное регулярное выражение URL, но я хотел избежать любой потенциальной путаницы в том, от чего я хочу избавиться, и, возможно, притвориться забавным.






Вы используете метод re.match() или re.search()? Я понимаю, что re.match() предполагает "^" в начале вашего выражения и будет искать только в начале текста, в то время как re.search() действует больше как регулярные выражения Perl и будет соответствовать только началу текста, если вы включите " ^ "в начале вашего выражения. Надеюсь, это поможет.
В Python есть различие между «совпадением» и «поиском»; match ищет только шаблон в начале строки, а поиск ищет шаблон, начиная с любого места в строке.
>>> import re
>>> pattern = re.compile("url")
>>> string = " url"
>>> pattern.match(string)
>>> pattern.search(string)
<_sre.SRE_Match object at 0xb7f7a6e8>
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']
Вероятно, вас сбивают с толку разные методы re.search и re.match.