【问题标题】:Regular expression to find email address in a string在字符串中查找电子邮件地址的正则表达式
【发布时间】:2012-02-23 17:01:17
【问题描述】:

我正在尝试创建一个正则表达式,它将在电子邮件标题中的 Cc 字段之后查找电子邮件地址。我没有对字符串的编程控制,因此它不特定于任何特定的编程语言。它只是某些软件集成的一部分,它需要在搜索条件中使用一些正则表达式

电子邮件标题如下所示:

Received: by hermit.cdu-staff.local 
    id <01CCE6E3.19910AB8@hetmit.ere-tyumm.local>; Thu, 9 Feb 2012 13:57:14 +0930
MIME-Version: 1.0
Content-Type: multipart/alternative;
    boundary="----_=_NextPart_001_01CCE6E3.19910AB8"
Content-class: urn:content-classes:message
X-MimeOLE: Produced By Microsoft Exchange V6.5
Subject: Email header example
Date: Thu, 9 Feb 2012 13:57:10 +0930
Message-ID: <6434D994F5A495428AB3B69877565EF97040C469A@hermit.cdi-stann.local>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: Email header example
Thread-Index: Aczm4xa7dGVpHUWERSSOuR8HCNmrAw==
From: "Bishnu Paudel" <Bishnu.Paudel@company.com>
To: "Study" <study@company.com>
Cc: "Cameron Loudon" <Cameron.Loudon@company.com>

我创建了一个正则表达式,如果字符串是单行字符串(标题中的最后一行),它会很好用。这是表达式

(^|,)\s*.*Cc:.*(bishnu.paudel|cameron.loudon)@company[.]com\s*($|,).

任何帮助将不胜感激。

【问题讨论】:

    标签: regex string email-validation


    【解决方案1】:

    我终于通过构造这个正则表达式让它工作了。 Cc:.*&lt;(student.admin|study|summer|midyear|changeyourworld)@ourcompany[.]com&gt; 匹配标头例如:

    To: <paudel_bishnu@hotmail.com> 
    Cc: "studentadmin" <student.admin@ourcompany.com>, "Bishnu Paudel" <Bishnu.Paudel@ourcompany.com> 
    

    但它不会匹配目标电子邮件 (student.admin) 不在抄送字段的第一位的标题。例如:

    To: <paudel_bishnu@hotmail.com> 
    Cc: "Bishnu Paudel" <Bishnu.Paudel@ourcompany.com>, "studentadmin" <student.admin@ourcompany.com> 
    

    干杯,

    【讨论】:

      【解决方案2】:

      您尚未指定您使用的编程语言,但一般情况下,您可以编写如下内容:

      (^|,)\s*(admin|clients)@ourcompany[.]com\s*($|,)
      

      这将匹配admin@ourcompany.comclients@ourcompany.com,前提是它前面是字符串开头或逗号(带有可选空格),后跟逗号或字符串结尾(带有可选空格)。

      请注意,电子邮件地址实际上非常复杂——例如,如果我没记错的话,admin@ourcompany.com"admin"@ourcompany.com 在技术上是等效的——所以我要小心:这种临时解析方法可能不会可取的。 (基本上,我会问:如果您的正则表达式返回误报或误报,问题有多大?如果您需要对结果非常有信心,那么这种方法可能不是要走的路。)

      【讨论】:

      • 感谢 Ruakh,是的,您的正则表达式与电子邮件地址匹配。但是我需要一个正则表达式来在包含 CC: 、 TO: 和一堆东西的电子邮件标题中搜索我们的电子邮件地址。我只需要查找我们的任何一个电子邮件地址是否存在于电子邮件字符串中,后跟“CC:”。电子邮件标题以字符串形式出现。我没有执行此操作的程序控制,因此它与任何编程语言无关。
      • 嗨 Ruakh,我最终创建了一个正则表达式,它可以匹配电子邮件之前/之后或之间的任意数量的字符,并将查找我们的电子邮件地址。(^|,)\s* .*Cc:.*(bishnu.paudel|cameron.loudon)@ourcompany[.]com\s*($|,) 但是,这与包含换行符的字符串不匹配。请问有什么办法吗?
      • @BishnuPaudel:默认情况下,. 表示“任何非换行符”,但您也可以指定它也应匹配换行符。不幸的是,您仍然没有指定这是什么编程语言,因此很难给出适当的建议。您可以尝试将整个正则表达式包装在 (?s:...) 中——例如,(?s:(^|,)\s*.*Cc:.*(bishnu.paudel|cameron.loudon)@ourcompany[.]com\s*(‌​$|,))——它适用于多种语言。
      • 嗨 Ruakh,非常感谢。我正在使用一个现有的 Windows 应用程序,它期望正则表达式在生成报告时过滤字符串。我没有对字符串的编程控制。我刚刚知道该应用程序是在 .net 中构建的。会试一试,让你知道我是怎么走的。干杯:)
      【解决方案3】:

      下面的正则表达式应该可以解决问题

      \b[A-Z0-9._%+-]+@yourcompany.com\b
      

      这是对here 提供的正则表达式的改编。请注意原始网站上的 cmets 关于“有效”电子邮件地址的定义。

      【讨论】:

      • 嗨直到,我终于通过构造这个正则表达式让它工作了。 Cc:.* 匹配标头,例如 To: 抄送: "studentadmin" , "Bishnu Paudel" 但它与目标电子邮件 (student.admin) 不匹配的标头不匹配在抄送领域的第一名。例如:收件人: 抄送:“Bishnu Paudel”,“studentadmin”
      猜你喜欢
      • 2013-04-09
      • 2011-08-03
      • 2011-12-28
      • 2022-10-22
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      相关资源
      最近更新 更多