繁体   English   中英

为什么非贪婪的Python正则表达式不够贪婪?

[英]Why is non-greedy Python Regex not non-greedy enough?

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

问题是某些URL是misc@misc.misc'misc''misc'(或与<>相似),因此在实现非贪婪的正则表达式后,我仍然留下了enquiries@smart-traffic.com.au">enquiries@smart-traffic.com.au例如, enquiries@smart-traffic.com.au">enquiries@smart-traffic.com.au

我试过两个?? 在一起,但显然不能正常工作,那么在这种情况下,它们能达到干净URL的正确方法是什么?

正则表达式的问题在于,您当前仅在查找非空格(句号)co,而不是在查找非空格(句号)非空格。

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

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

然后,您可以使用它来获取所需的url,但必须确保将它们分割在r'\\n'因为它们在文本中可能包含换行符,如上所示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM