我想在文本文件中找到有效的电子邮件地址,这是我的代码:
email = re.findall(r'[a-zA-Z\.-]+@[\w\.-]+',line)
但我的代码显然不包含@符号之前有数字的电子邮件地址。我的代码无法处理没有有效结尾的电子邮件地址。那么有人可以帮我解决这两个问题吗?谢谢!
我的问题的一个例子是:
我的代码可以找到这封电子邮件:xyz@gmail.com
但找不到这个:xyz123@gmail.com
它无法过滤掉这封电子邮件:xyz @ gmail
答案 0 :(得分:2)
试用validate_email
包。
pip install validate_email
然后
from validate_email import validate_email
is_valid = validate_email('example@example.com')
答案 1 :(得分:2)
答案 2 :(得分:2)
从python re docs,\w
匹配任何字母数字字符和下划线,相当于集合[a-zA-Z0-9_]
。因此[\w\.-]
会恰当地匹配数字和字符。
email = re.findall(r'[\w\.-]+@[\w\.-]+(\.[\w]+)+',line)
This post更广泛地讨论了匹配的电子邮件地址,并且在您的代码无法捕获的匹配电子邮件地址中遇到了更多的陷阱。例如,电子邮件地址不能完全由标点符号(...@....
)组成。此外,地址通常有最大长度,具体取决于电子邮件服务器。此外,许多电子邮件服务器匹配非英语字符。因此,根据您的需求,您可能需要更全面的模式。