【问题标题】:regex to get emailaddress with / without display name正则表达式获取带有/不带显示名称的电子邮件地址
【发布时间】:2017-02-20 07:01:52
【问题描述】:

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

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,它不会给我完整的电子邮件地址。

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

【问题讨论】:

标签: regex email-address


【解决方案1】:

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

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

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

RegEx101 Demo.

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

它会尝试匹配 @ 符号之前和之后的字符,这些字符不包含空格或其他分隔符。在 @ 之后必须出现一个 TLD。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    相关资源
    最近更新 更多