【问题标题】:How to improve this email regex? [duplicate]如何改进此电子邮件正则表达式? [复制]
【发布时间】:2015-08-03 11:16:53
【问题描述】:

我正在尝试使用具有此模式的正则表达式在 Python 中匹配电子邮件地址:

"\w{1,}@\w{1,}.\w{1,}"

但有时有些电子邮件地址看起来像 firstname.lastname@lol.omg.hahaha.museum,我的模式会错过。

有没有办法调整这个正则表达式,使其包含任意数量的链式“.word”类型模式?

【问题讨论】:

  • 是的 - '@' in string。这是你能做的最好的。
  • @user51819 - Vaultah 实际上提出了一个有效的观点;为电子邮件提供有效的正则表达式非常困难(因为有效的电子邮件地址可以采用许多不同的格式)。许多应用程序使用简单的检查字符串中的 at 符号(以及 at 符号之后的内容)
  • 顺便说一句,你应该使用 {1,} 而不是 +
  • "gibberish@gibberish" 是一个有效的电子邮件地址(信不信由你!)
  • 理论上您可以使用顶级域来发送电子邮件。 .com 的所有者可以创建像 owner@com 这样的地址。实际上,没有人这样做,而且可能有数百万个地址验证器不允许这样做。

标签: python regex email-validation


【解决方案1】:

您可以使用以下内容:

[\w.-]+@[\w-][\w.-]+\w   //replaced {1,} with its equivalent.. "+"

【讨论】:

  • @Barmar 是的,我做到了.. 但我没有看到用户要求它?
  • 这不会错误地拾取句子末尾的句点吗?例如“我的电子邮件是 myname@somewhere.com。”
  • @user51819 检查更新:)
  • 我只是想了解结构。 "[\w.-]" 本身是什么意思? a-zA-Z0-9_ 字符或句号还是后缀?
  • @user51819 表示匹配集合中的任意字符[a-zA-Z0-9_.-]
【解决方案2】:

您不应尝试使用正则表达式匹配电子邮件地址。您必须使用更复杂的状态机来检查地址是否正确匹配 RFC 2822。

https://pypi.python.org/pypi/validate_email 就是这样一个您可以查看的库。

【讨论】:

  • 根据他的评论,他不是在做验证,而是在刮。
【解决方案3】:

这应该适合你

[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}

【讨论】:

  • 那会错过我使用的地址。但我没关系。
  • 有什么理由不使用\w 而不是a-zA-Z0-9_,就像他原来的正则表达式那样?
  • 你能用 \w+ 代替 [a-zA-Z0-9._-]+ 吗?
  • @user51819 \w 是字母、数字和下划线的缩写。它不包括点或破折号。这就是你原来的正则表达式不起作用的原因。
  • 我发现\w 有时会包含一些在电子邮件地址中无效的奇怪字符。我想这取决于您使用的语言。
猜你喜欢
  • 2010-11-03
  • 2012-06-09
  • 1970-01-01
  • 2010-11-18
  • 2012-03-18
  • 2011-12-28
  • 2012-01-02
  • 2015-12-03
相关资源
最近更新 更多