python中的正则表达式:findall

时间:2015-02-27 04:51:25

标签: python regex

re.findall(r'[\w]+@+[\w.]','blahh ggg@google.com yipee']

返回['ggg@g']

为什么不返回['ggg@google.com']或至少['ggg@google']

3 个答案:

答案 0 :(得分:2)

\w+@+[\w.]+

         ^^

您未能添加量词。因此@之后只能获得一个字符。

应该是

`re.findall(r'[\w]+@+[\w.]+','blahh ggg@google.com yipee')`

此外,如果只有一个@,您可以在其前面删除量词,以使其成为\w+@[\w.]+

输出:['ggg@google.com']

See Demo

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]+将匹配一个或多个连续的字母数字字符,以便为我们留下blahhggggooglecom和{{ 1}}。

现在yipee会在之前的匹配后匹配“@”,但只有[\w]+@后面会有一个“@”字符,因此只有ggg匹配。

同样,ggg@将与“@”匹配一次或多次,因为我们在[\w]+@+后只有一个“@”,因此上一个匹配保持不变,即ggg

接下来我们ggg@表示匹配后可以有一个字母数字字符或文字[\w]+@+[\w.].后面有ggg@所以它被选中制作匹配g

所以,最后我们得到[ggg@g]作为结果。

打印ggg@g试试这个:

['ggg@google.com']