使用正则表达式python查找电子邮件[重复]

Posted

技术标签:

【中文标题】使用正则表达式python查找电子邮件[重复]【英文标题】:find email using regular expression python [duplicate] 【发布时间】:2017-06-07 12:02:37 【问题描述】:

我想在文本文件中查找有效的电子邮件地址,这是我的代码:

email = re.findall(r'[a-zA-Z\.-]+@[\w\.-]+',line)

但我的代码显然不包含@符号前有数字的电子邮件地址。而且我的代码无法处理没有有效结尾的电子邮件地址。那么有人可以帮我解决这两个问题吗?谢谢!

我的问题的一个例子是:

我的代码可以找到这个邮箱:xyz@gmail.com

但找不到这个:xyz123@gmail.com

它也无法过滤掉这封电子邮件:xyz@gmail

【问题讨论】:

【参考方案1】:

从python re docs 开始,\w 匹配任何字母数字字符和下划线,相当于集合[a-zA-Z0-9_]。所以[\w\.-] 将适当地匹配数字和字符。

email = re.findall(r'[\w\.-]+@[\w\.-]+(\.[\w]+)+',line)

This post 更广泛地讨论了匹配的电子邮件地址,并且您在匹配电子邮件地址时遇到的更多陷阱是您的代码无法捕获的。例如,电子邮件地址不能完全由标点符号 (...@....) 组成。此外,地址通常有一个最大长度,具体取决于电子邮件服务器。此外,许多电子邮件服务器匹配非英语字符。因此,根据您的需要,您可能需要更全面的模式。

【讨论】:

用户名允许加号登录电子邮件地址 使用这个r'[\w\.-]+@[\w\.-]+(?:\.[\w]+)+' 会更健壮。【参考方案2】:

试试validate_email 包。

pip install validate_email

然后

from validate_email import validate_email
is_valid = validate_email('example@example.com')

【讨论】:

谢谢。但是我只能通过正则表达式来做到这一点吗?我更喜欢只使用正则表达式 试驾了validate_email,可悲的是它认为bad@ss是一个有效的电子邮件。 另外,它比平时需要更长的时间。【参考方案3】:
^[\w-\.]+@([\w-]+\.)+[\w-]2,4$

不是我的,但我以前在应用程序中使用过。

Source

【讨论】:

你能向我解释一下 w 后的“-”是做什么的吗? 它匹配 '-' 字符的字面意思,因此用户可以输入类似 john-doe@example.com 的内容。 This site 是学习正则表达式以及每个部分如何工作的绝佳资源。 对我不起作用:error: bad character range \w-\. at position 2

以上是关于使用正则表达式python查找电子邮件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python - 使用正则表达式查找多个匹配项并将它们打印出来[重复]

Python正则表达式,在地址中查找电子邮件域

python)使用正则表达式查找所有匹配项(从 re.search 更改为 re.findall)[重复]

查找连续重复单词时的Python后视正则表达式“固定宽度模式”错误

Django 使用查询集和正则表达式查找重复项

电子邮件正则表达式返回空 [重复]