Python和"重新"

时间:2020-03-05 18:55:59  来源:igfitidea点击:

我在python上的Regex上有一个教程介绍了如何在python中使用re模块,我想从A标签中获取URL,因此知道Regex我编写了正确的表达式并在我选择的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仅在字符串的开头查找模式,而search在字符串的任何位置查找模式。

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

回答

>>> import re
>>> pattern = re.compile("url")
>>> string = "   url"
>>> pattern.match(string)
>>> pattern.search(string)
<_sre.SRE_Match object at 0xb7f7a6e8>

回答

我们可能被re.search和re.match的不同方法绊倒了。

回答

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']