我有一个仅包含电子邮件的文本,但之间没有空格
每封电子邮件

示例: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']

10-05 21:08
查看更多