在Regex Python模式的中间使用非贪婪有什么意义

问题描述

我目前正在学习Python,并且正在使用正则表达式。我注意到,如果不是在模式结束时或模式结束之前,我就无法使用正则表达式非贪婪。

categories = [
{
   name: 'one',id: 1,isSelected: true
},{
   name: 'two',id: 2,isSelected: false,}
]

这会给我:

x = "From [email protected] Sat Jan  5 09:14:16 2008"
y = re.findall('\S+?@\S+',x)

鉴于此:

[email protected]

将是:

x = "From [email protected] Sat Jan  5 09:14:16 2008"
y = re.findall('\S+@\S+?',x)
or
y = re.findall('\S+?@\S+?',x)

那么,如果非贪婪的正则表达式不在模式的结尾或结尾,那么有什么用呢?

解决方法

在模式中出现某些跟随它们时,它们才有意义。例如,比较

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'".*?"'