+?迹象仍然以贪婪的方式起作用

时间:2018-12-16 05:37:41

标签: python regex python-3.x

当我以下面的方式运行python命令时:

make(map[string]int)

我明白了

z='From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008'
print(re.findall('\S+@\S+',z))

当我再次运行它时,将['stephen.marquard@uct.ac.za'] 添加为:

?

我明白了

z='From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008'
print(re.findall('\S+@\S+?',z))

现在,我想打印出['stephen.marquard@u'] ,所以我跑了:

['d@uct.ac.za']

但是,我收到了:

z='From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008'
print(re.findall('\S+?@\S+',z))

我以为我会收到['stephen.marquard@uct.ac.za'] ,因为['d@uct.ac.za']使?不满意。 为什么我错了?

1 个答案:

答案 0 :(得分:1)

当您这样做:

re.findall('\S+?@\S+',z)

从开始尝试尽可能不贪心开始,直到找到'@',然后再找到其余的。 '\S+?@'只需从开始到'@'取所有字符。

对于'\S+@\S+?',您不会在?的右边给出任何内容,这意味着它使正则表达式更加不贪心-仅取一个。

假设,如果您给'\S+?@\S+?\.'?之后的点),则遵循类似于第一种情况的规则-尝试尽可能不贪婪,直到看到{{ 1}}(点)。