re.findall(r'[\w]+@+[\w.]','blahh ggg@google.com yipee']
返回['ggg@g']
为什么不返回['ggg@google.com']
或至少['ggg@google']
?
答案 0 :(得分:2)
\w+@+[\w.]+
^^
您未能添加量词。因此@
之后只能获得一个字符。
应该是
`re.findall(r'[\w]+@+[\w.]+','blahh ggg@google.com yipee')`
此外,如果只有一个@
,您可以在其前面删除量词,以使其成为\w+@[\w.]+
输出:['ggg@google.com']
Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
答案 1 :(得分:0)
在[\w]+@+[\w.]
中,您只是在@
之后检查单个字符。
这就是为什么它只是在g
之后比较@
并停止。
您必须使用@
或*
检查+
后多次出现的字词。
*= Zero or more occurrences Ex. ggg@google,com, ggg@
+=One or more occurrences Ex ggg@g, ggg@googlw.com
答案 2 :(得分:0)
re.findall(r'[\w]+@+[\w.]','blahh ggg@google.com yipee')
,让我们分解一下:
首先[\w]
将匹配任何字母数字字符,因此它将匹配除空格和“@”之外的所有字符。
然后[\w]+
将匹配一个或多个连续的字母数字字符,以便为我们留下blahh
,ggg
,google
,com
和{{ 1}}。
现在yipee
会在之前的匹配后匹配“@”,但只有[\w]+@
后面会有一个“@”字符,因此只有ggg
匹配。
同样,ggg@
将与“@”匹配一次或多次,因为我们在[\w]+@+
后只有一个“@”,因此上一个匹配保持不变,即ggg
。
接下来我们ggg@
表示匹配后可以有一个字母数字字符或文字[\w]+@+[\w.]
,.
后面有ggg@
所以它被选中制作匹配g
。
所以,最后我们得到[ggg@g
]作为结果。
打印ggg@g
试试这个:
['ggg@google.com']