python正则表达式 [^@]+@[^@]+\.[^@]+ 如何检查邮箱?
3 个回答
要正确验证一个符合RFC822地址规范(第27页的“6. 地址规范”部分)的地址,其实比简单的正则表达式要复杂一些。
为了做到这一点,最好是用一种语法规则(就像RFC中描述的那样),不过用正则表达式也可以。你可以在Email::Valid模块中找到这样的正则表达式,具体来说就是在这里。我还没有在Python中试过这个正则表达式(但在Perl中运行得很好)。
据我所知,这就是检查一个电子邮件地址是否符合RFC822标准的实际方法。你也可以查看这个SO帖子,了解更多细节。
现在来回答你的问题,这个正则表达式[^@]+@[^@]+\.[^@]+
的意思是“至少有一个或多个不是@的字符,然后是一个@,接着是至少一个或多个不是@的字符,然后是一个点,最后是至少一个或多个不是@的字符”。
[^@]+
- 这个表达式用来检查一个字符串中有没有不是@
符号的字符,而且这个字符可以出现一次或多次。
@
- 这个表达式就是直接查找@
符号。
\.
- 这个表达式用来查找.
这个字符(因为.
在其他情况下会代表任何字符,所以这里需要加一个反斜杠来“转义”它)。
所以,整体来看,它是在寻找一个字符串,这个字符串中不包含@
,然后是@
,接着又是一个不包含@
的字符串,后面跟着.
,最后又是一个不包含@
的字符串。
这个规则是用来检查一个字符串的格式的。它要求字符串里有一个或多个不是@
的字符,接着是一个@
,然后又是一个或多个不是@
的字符,再接着是一个.
,最后是一个或多个不是@
的字符。
[]
表示一个字符类,而^
则是用来表示这个字符类的反面。+
表示前面的字符要出现一次或多次。最后,.
需要用\.
来转义,因为.
是一个特殊符号,表示“任何字符”。
这意味着这种方法并不是检查电子邮件的最佳方式,因为还有很多其他的限制。例如,这种方式会允许一个长度达到10,000个字符的电子邮件,或者像!@#.com
这样的域名。
建议你使用像Regex101这样的工具来测试表达式,并获取详细的说明。