如何将电子邮件与特定规则匹配

时间:2014-01-08 14:52:01

标签: python regex

如何使用正则表达式实现以下功能:

  • 如果字符串不以某个字符开头,则匹配
  • 匹配,如果没有两个“,”或任何其他字符
  • 匹配,如果字符串有双“,即使它们不相邻

使用Python。

目前我正在尝试将电子邮件地址与这些规则相匹配。我目前的模式是

pattern = '^([A-Z0-9._-\"]|\"[!\,;]\"){1-127}+@[^-][A-Z0-9.-]{3-256}+\.[A-Z]{2,4}[^-]$'

但我对如何实施这些规则感到困惑。

更具体: 我想要一个与2个部分(名称,域名)组成的电子邮件地址相匹配的模式。 名称部分应不再是128个字符,应该在@之前。它应该 a-z0-9 字符的成员,还有。,_, - ,“。名称不能有相邻的点。 如果名称包含,那么它应该与另一个”配对。名称可以包含!;,字符,如果它们位于配对“之间。

域名应不再是256 不短于3 字符,应以点分隔。域名无法以 - 开头或结尾。

此信息旨在帮助您了解我的需求,主要问题是我在顶部说明的三条规则。如果你告诉我如何实现它们,我将很高兴。

1 个答案:

答案 0 :(得分:0)

我对你的问题感到困惑。你的标题用逗号分隔的列表,然后你谈论电子邮件地址。电子邮件有官方标准正则表达式:

(?:[a-z0-9!#$%&'*+/=?^_{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_{|}~-]+)|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\[\x01-\x09\x0b\x0c\x0e-\x7f])")@(?:(?:a-z0-9?.)+a-z0-9?|[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\[\x01-\x09\x0b\x0c\x0e-\x7f])+)])