我被要求写一个可以捕获多域电子邮件地址并在python中实现的正则表达式。所以我想出了以下正则表达式(和代码;虽然重点是正则表达式),但我认为这是正确的:

import re
regex = r'\b[\w|\.|-]+@([\w]+\.)+\w{2,4}\b'
input_string = "hey my mail is abc@def.ghi"
match=re.findall(regex,input_string)
print match


现在,当我运行此命令(使用非常简单的邮件)时,它无法捕获!!
而是显示一个空列表作为输出。有人可以告诉我正则表达式文字在哪里出错了吗?

最佳答案

这是一个简单的开始

regex = r'\b[\w.-]+?@\w+?\.\w+?\b'
re.findall(regex,input_string)  # ['abc@def.ghi']


原来的问题是您不需要字符类(|)中的[..]运算符。只需将[\w|\.|-]编写为[\w.-](如果-位于末尾,则无需转义)。

接下来,合法域名会有太多变化。只需在@符号后查找至少一个由单词字符包围的句点:

@\w+?\.\w+?\b

关于python - 正则表达式用于python中的电子邮件解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34646989/

10-12 14:58
查看更多