[英]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.