如何通过正则表达式匹配多个电子邮件?

时间:2015-12-01 15:54:00

标签: python regex

我写了一个正则表达式来匹配电子邮件,它适用于一封电子邮件,但对于多封电子邮件,它不起作用。有人可以帮帮我吗?提前谢谢!

>>> import re
>>> str = "my email are 670578362@qq.com and 178263745@163.com"
>>> r = re.search(r'[A-Za-z0-9\.+_-]+@[A-Za-z0-9]+\.[a-zA-Z]+',str)
>>> print r.group()
670578362@qq.com # I want to get (670578362@qq.com, 178263745@163.com)

3 个答案:

答案 0 :(得分:1)

re.search只查找第一次出现。

来自https://docs.python.org/2/library/re.html

“扫描字符串,查找正则表达式模式产生匹配的第一个位置,并返回相应的MatchObject实例。如果字符串中的位置与模式匹配,则返回None”

所以这应该可以解决问题:

import re
str = "my email are 670578362@qq.com and 178263745@163.com"
for r in re.finditer(r'[A-Za-z0-9\.+_-]+@[A-Za-z0-9]+\.[a-zA-Z]+',str):
    print r.group()

答案 1 :(得分:0)

如果您希望输出为元组而不是问题中的列表

>>> import re
>>> str = "my email are 670578362@qq.com and 178263745@163.com"
>>> r = re.findall(r'[A-Za-z0-9\.+_-]+@[A-Za-z0-9]+\.[a-zA-Z]+',str)
>>> r = tuple(r) # ('670578362@qq.com', '178263745@163.com')

答案 2 :(得分:0)

您需要使用findall的{​​{1}}方法,它会为您提供小组数学列表 而re仅给出第一场比赛

希望这有帮助

.group()