如何检查放在一起的两个点和电子邮件中的引号?

时间:2016-03-11 14:56:45

标签: python regex string email

我有一个要解决的任务:

  

在python上编写一个函数,它检查符合这些的电子邮件   规则:

     
      
  1. 电子邮件包含名称和域名部分以及" @"标记在它们之间;

  2.   
  3. 域部分在3到256个符号之间,是一组非空字符串,由a-z 0-9_-符号组成,用点分隔;

  4.   
  5. 域部分的每个组件都不能以" - "开头或结尾;符号;
  6.   
  7. 名称部分(在@之前)不超过128个符号,由a-z0-9" ._-组成;
  8.   
  9. 在名称部分,我们不能写两个点在一起" ..&#34 ;;
  10.   
  11. 如果我们在名称部分(")中有双引号,它们应该有一对(" blabla");
  12.   
  13. 我们也可以写"!,:"名称部分中的符号,但仅在双引号之间。
  14.   

我写了一个小的正则表达式,一步一步到第4点:

((?!-)[A-Z0-9"\.\-_]{1,128}(?<!-)@(?!-)[A-Z0-9\-_.]{3,256}(?<!-))

但我坚持第5和第6。

如何在我的正则表达式中实现这些条件?我试着添加

|(?:\.(?!\.))

最后,但它不起作用。

1 个答案:

答案 0 :(得分:1)

不要试图在regexp中执行此操作,this是使用Perl在正则表达式中编写的电子邮件验证程序的示例,直到今天怪物仍然困扰着我的梦想。

使用正确的解析器,您应该尝试查看validate_email库的来源并进行更改以满足您的目的。 This也可能是一个很好的资源来源。