【发布时间】:2016-04-11 08:40:52
【问题描述】:
我被要求编写可以捕获多域电子邮件地址并在 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
现在,当我运行它(使用非常简单的邮件)时,它没有捕捉到它! 相反,它显示一个空列表作为输出。谁能告诉我正则表达式文字哪里出错了?
【问题讨论】:
-
谷歌这个!上面有很多内容。即使在 SO 上。
-
我知道有大量的复制粘贴电子邮件正则表达式,但这个问题正在伤害我的大脑;知道正则表达式是正确的,但它不起作用。
-
a) 它不输出空字符串,它输出
['def.'](这是您使用()捕获的唯一位)。 b) 正则表达式不正确,您不能像在字符类中那样使用|- 在[]内它从字面上匹配管道字符,它不做非此即彼,\b不在字符串末尾匹配,并且对于像example@example.google这样没有 2-4 位 TLD 的地址,正则表达式被破坏。 -
在@TessellatingHeckler 的注释之上,如果您有捕获组,
findall返回捕获组,而不是完整匹配。将([\w]+\.)更改为(?:\w+\.)以将括号更改为非捕获(同时删除多余但无害的括号;\w本身就是一个字符类)。
标签: python regex email expression