为什么非贪婪的Python Regex不够贪婪?

时间:2016-07-01 14:33:29

标签: python regex non-greedy

我已经在一组字符串网址上实现了非贪婪的正则表达式,我试图清理它们,以便它们在.com(.co.uk等)之后结束。其中一些在所需截止后继续'"<,因此我使用了x = re.findall('([A-Za-z0-9]+@\S+.co\S*?)[\'"<]', finalSoup2)

问题是有些网址是misc@misc.misc' misc&#39;&#39; misc&#39; (或类似于&lt;&gt;)等实现非贪婪的正则表达式后,我仍然留下enquiries@smart-traffic.com.au">enquiries@smart-traffic.com.au,例如。

我已经尝试了两个??,但显然无法正常工作,那么他们在这种情况下实现干净网址的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

你的正则表达式的问题在于你目前只寻找非空格(句号)而不是寻找非空格(句号)非空格。

因此,在这种情况下,您可以根据上述信息使用以下正则表达式。

>>> finalSoup2 = """
... misc@misc.misc'misc''misc
... enquiries@smart-traffic.com.au">enquiries@smart-traffic.com.au
... google.com
... google.co.uk"'<>Stuff
... """
>>>x = re.findall('([A-Za-z0-9]+@[^\'"<>]+)[\'"<]', finalSoup2)
>>>x
['misc@misc.misc',
 'enquiries@smart-traffic.com.au',
 'enquiries@smart-traffic.com.au\ngoogle.com\ngoogle.co.uk']

然后您可以使用它来获取您想要的网址,但您必须确保将它们拆分为r'\n',因为它们可能在文本中有换行符,如上所示。