当我以下面的方式运行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']
使?
不满意。
为什么我错了?
答案 0 :(得分:1)
当您这样做:
re.findall('\S+?@\S+',z)
从开始尝试尽可能不贪心开始,直到找到'@'
,然后再找到其余的。 '\S+?@'
只需从开始到'@'
取所有字符。
对于'\S+@\S+?'
,您不会在?
的右边给出任何内容,这意味着它使正则表达式更加不贪心-仅取一个。
假设,如果您给'\S+?@\S+?\.'
(?
之后的点),则遵循类似于第一种情况的规则-尝试尽可能不贪婪,直到看到{{ 1}}(点)。