如何在Python中使用正则表达式从文件中刮取有效电子邮件?

如何在Python中使用正则表达式从文件中刮取有效电子邮件?,python,python-3.x,regex,Python,Python 3.x,Regex,我有一个包含一些随机文本的文件,包括一些随机电子邮件。我正在尝试编写一个代码,可以使用Regex查找具有有效域(gmail.com、outlook.com、hotmail.com)的电子邮件 以下是我迄今为止尝试过的代码: 导入请求 进口稀土 电子邮件地址为“[a-zA-Z0-9.-]+[^!\$%^&*()]@[gmail | hotmail | outlook]+[.com]+” 将open('emails.txt')作为f: read=f.read() email\u data=re.fi

我有一个包含一些随机文本的文件,包括一些随机电子邮件。我正在尝试编写一个代码,可以使用Regex查找具有有效域(gmail.com、outlook.com、hotmail.com)的电子邮件

以下是我迄今为止尝试过的代码:

导入请求
进口稀土
电子邮件地址为“[a-zA-Z0-9.-]+[^!\$%^&*()]@[gmail | hotmail | outlook]+[.com]+”
将open('emails.txt')作为f:
read=f.read()
email\u data=re.findall(email\u re,read)
打印(电子邮件数据)
我的email.txt文件:

里面的句子pythonprac@dummy.com
test@gmail.com
test1@hotmail.com
这篇文章有5段的草稿,然后是定稿。首先出现在EssayBishop上。
hello@gm.com
所需输出: test@gmail.com,
test1@hotmail.com在正则表达式中,这一部分的
[gmail | hotmail | outlook]+
基本上是指“匹配以下任意字符中的一个或多个:
g、m、a、i、l、h、o、t、k、u、
。您需要的是一个regex组
(?:…)
如下:
r'[a-zA-Z0-9.-]+[^!$%^&*()]@(:gmail | hotmail | outlook)\.com'
.com
中的
表示任何后跟
com的字符,因此您需要使用

对其进行转义

import re
email_re = re.findall(r'[\w\.-]+@[\w\.-]+', file)

这回答了你的问题吗?这在很大程度上取决于你想要的准确度,因为电子邮件地址可以有不同的格式(根据规范,所有格式都是正确的),请参阅:在发布问题之前阅读;它涵盖了一些常见的初学者错误。要检查电子邮件是否有效(即通过检查dns来检查语法和有效域),您可以使用。how to的答案显示了如何获取潜在的电子邮件地址,然后可以使用pyIsEmail验证这些地址。