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

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

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

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

我的问题的一个例子是:

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

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

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

【问题讨论】:

    标签: python regex email-validation


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 2010-11-18
    • 2012-07-04
    • 2019-05-05
    • 2011-08-03
    • 2018-11-08
    • 2014-12-09
    相关资源
    最近更新 更多