我有一个仅包含电子邮件的文本,但之间没有空格
每封电子邮件
示例:email1@file1.comemail2@file1.comemail3@dom1.net
我已经申请了re.findall(r'[\w\.-]+@[\w\.-]+', str(line))
这就是我得到的
email1@file1.comemail
2@file1.comemail
3@dom1.net
流行的顶级域名是
.com
,.net
,.info
,.org
。因此,如果我在@[\w\.-]+
之后找到其中一个,那么我将在该行的tlds之后引起一个空格,然后提取电子邮件。但是如何检查我有.com或.net或.info...。
最佳答案
一个选项(如果您考虑到.com .net等很多变化,可能会变得非常麻烦)可能是使用非贪婪的+?
匹配并列出允许使用。
[\w.-]+?@[\w.-]+?\.(?:com|net)
alternation | Regex demo
请注意,重复字符类
[\w.-]+
也将允许例如.-.-.@.-.-..com
例如
import re
s = "email1@file1.comemail2@file1.comemail3@dom1.net"
regex = r"[\w.-]+?@[\w.-]+?\.(?:com|net)"
res = re.findall(regex, s)
print(res)
结果
['email1@file1.com', 'email2@file1.com', 'email3@dom1.net']