在正则表达式 Python 的模式中间使用非贪婪有什么意义吗

Is there any point in using non-greedy in the middle of pattern in Regex Python

我目前正在学习 Python 并且正在研究正则表达式。我注意到如果正则表达式不在模式结束之内或之前,我无法理解使用非贪婪的正则表达式。

x = "From someone.name@gmail.com Sat Jan  5 09:14:16 2008"
y = re.findall('\S+?@\S+' , x)

这会给我:

someone.name@gmail.com

而这个:

x = "From someone.name@gmail.com Sat Jan  5 09:14:16 2008"
y = re.findall('\S+@\S+?' , x)
or
y = re.findall('\S+?@\S+?' , x)

将是:

someone.name@g

那么,如果非贪婪正则表达式不是在模式结束之内或之前,那么使用非贪婪正则表达式有什么意义吗?

当模式中出现某些东西时,它们才有意义。例如比较

p1 = re.compile(r'a.*?b')
p2 = re.compile(r'a.*b')

x = 'abb'
p1.match(x).group() # = 'ab'
p2.match(x).group() # = 'abb'

更具体地说,如果您想排除定界符,它们会很有用。例如,要匹配引号之间的文本,您可以编写

pattern = r'"[^"]*"'

或者你可以这样写

pattern = r'".*?"'