我有一个仅包含电子邮件的文本,但之间没有空格 每封电子邮件
示例: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...。
答案 0 :(得分:0)
一个选项(如果考虑到.com .net等很多变体,可能会变得非常麻烦)可能是使用非贪婪的+?
匹配并列出所有您会选择的选项允许使用alternation。
[\w.-]+?@[\w.-]+?\.(?:com|net)
请注意,重复字符类[\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']
答案 1 :(得分:0)
您可以使用re.sub()
在每个tld之后添加空间。例如,我指定了.net
,.org
和.com
,但是您可以根据需要添加任意数量。
然后您可以应用正则表达式
import re
text = 'email1@file1.comemail2@file1.comemail3@dom1.net'
new_text = re.sub(r'(.com|.net|.org)', r'\1 ', text)
emails = re.findall(r'[\w\.-]+@[\w\.-]+', new_text)
输出
['email1@file1.com', 'email2@file1.com', 'email3@dom1.net']