正则表达式获取带/不带显示名称的emailaddress

时间:2017-02-20 07:01:53

标签: regex email-address

在我的情况下,内容将会包含以下任何格式的电子邮件地址。

1. From : dr-dscsda-ds-info@asdf.com
2. From:sadaedf@sdc.sdfds
3. rom: sdcasdc <information@dsf.net> 
4. From: "adads" <adsasd@adsc.cd>
5. From: <customercare@ddsaf.com>

我需要找到上述模式之一并从此

中提取电子邮件地址

正则表达式我试过

From\s*:\s*((["|']?)[\w|\s]+\2)?\s*(\<?)([\w]([\w\-\.\+\'\/]*)@([\w\-\.]*)(\.[a-zA-Z]{2,22}(\.[a-zA-Z]{2}){0,2}))(\>?)

我的正则表达式中的所有格式匹配。但除了1和2之外,我将使用group(4)从正则表达式中提取电子邮件地址。

但是在1和2的情况下,它并没有给我完整的电子邮件地址。

请帮助改变正则表达式,使其符合我的所有情况。

1 个答案:

答案 0 :(得分:0)

您的正则表达式需要在实际电子邮件地址之前使用不带引号的名称。它已经匹配了一些字母而不知道它们是属于电子邮件地址还是属于不带引号的名称。

我认为你的正则表达可能有点过于复杂;它可以简化。这个正则表达式似乎适用于这些情况:

/From\s*:\s*.*?([^"'<>\s]+@[^"<>\s]+\.[^"'<>\s]+)/gi

RegEx101 Demo

第一个捕获组为您提供电子邮件地址。

它尝试匹配不包含空格或其他分隔符的@符号前后的字符。必须出现@ TLD之后。

这不能过滤掉所有无效的电子邮件或匹配所有有效的电子邮件,但对大多数情况来说这已经足够了。