7

我在 python 中的 Regex 上的教程解释了如何在 python 中使用 re 模块,我想从 A 标记中获取 URL,所以知道 Regex 我编写了正确的表达式并在我选择的正则表达式测试应用程序中对其进行了测试并确保它工作。当放入python时它失败了。

经过多次挠头后,我发现了问题,它会自动期望您的模式位于字符串的开头。我找到了解决方法,但我想知道如何更改:

regex = ".*(a_regex_of_pure_awesomeness)"

进入

regex = "a_regex_of_pure_awesomeness"

好的,这是一个标准的 URL 正则表达式,但我想避免对我想要摆脱的东西产生任何潜在的混淆,并可能假装很有趣。

4

4 回答 4

20

在 Python 中,“匹配”和“搜索”是有区别的;match 只查找字符串开头的模式,而 search 查找从字符串中任何位置开始的模式。

Python 正则表达式文档
匹配与搜索

于 2008-09-16T13:53:03.187 回答
4
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']
于 2008-09-16T22:44:42.987 回答
3
>>> import re
>>> pattern = re.compile("url")
>>> string = "   url"
>>> pattern.match(string)
>>> pattern.search(string)
<_sre.SRE_Match object at 0xb7f7a6e8>
于 2008-09-16T13:54:56.363 回答
1

你使用re.match()orre.search()方法吗?我的理解是,re.match()假设^表达式的开头有一个“”,并且只会在文本的开头进行搜索,而re.search()行为更像是 Perl 正则表达式,并且如果您包含一个“ ^”,则只会匹配文本的开头你表达的开始。希望有帮助。

于 2008-09-16T13:52:02.220 回答