问题描述
我目前正在学习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'".*?"'