包含电子邮件但没有空格的文本语言。怎么说提取电子邮件

2024-03-29 07:24:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如:email1@file1.comemail2@file1.comemail3@dom1.net

我申请了re.findall(r'[\w\.-]+@[\w\.-]+', str(line)),这就是我得到的

email1@file1.comemail
2@file1.comemail
3@dom1.net

流行的tld有.com.net.info.org。因此,如果我在@[\w\.-]+之后找到其中一个,那么我将在行中的tld之后引入一个空格,然后提取电子邮件。你知道吗

但是怎么查呢我有或.net或者。信息。。。。你知道吗


Tags: 文本renet电子邮件line空间file1tld
2条回答

您可以使用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']

一个选项(如果你考虑了很多变化,比如.com.net等等,这会变得相当麻烦)可以是使用一个非贪婪的+?匹配,并列出所有允许使用alternation的选项。你知道吗

[\w.-]+?@[\w.-]+?\.(?:com|net)

Regex demo| Python 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']

相关问题 更多 >