提取特定电子邮件地址

时间:2016-06-23 11:28:05

标签: c# regex

我正在尝试从" From"中提取电子邮件地址。如果要使用正则表达式,那么数据的一部分是空白的吗?

实施例

From: RP [mailto: demo@gmail.com]
Date: Thu, Jun 23, 2016 at 2:21 PM
Subject: testing
To: RP <demo1@gmail.com>

最终结果将返回demo@gmail.com而不是demo1@gmail.com

2 个答案:

答案 0 :(得分:1)

您可以使用非正则表达式方法:

var s = @"From: RP [mailto: demo@gmail.com]
Date: Thu, Jun 23, 2016 at 2:21 PM
Subject: testing
To: RP <demo1@gmail.com>";
var res = s.Split('\n')                // Split with newlines
    .Where(l => l.StartsWith("From:")) // If a line starts with `From:`
    .Select(m => m.Split().LastOrDefault().TrimEnd(']')) // Split with spaces, get the last chunk and trim from ]
    .FirstOrDefault();   // Get the first (if there is one only one) result
Console.WriteLine(res);

如果你需要一个正则表达式:

Console.WriteLine(Regex.Match(s, @"\[mailto:\s*(.*?)]").Groups[1].Value);

请参阅此IDEONE demo

模式说明

  • \[ - 文字[
  • mailto: - 文字字符串mailto:
  • \s* - 零个或多个空格
  • (.*?) - 第1组匹配第一个
  • 之前的任何字符
  • ] - 关闭]

答案 1 :(得分:0)

如果使用正则表达式,请使用后面的内容并定义它背后的内容,以便只获取 From 电子邮件地址

(?<=From:[^\[]+\[mailto:\s)(?<Email>[^\]]+)

这是一个例子

var data = @"From: RP [mailto: demo@gmail.com]
Date: Thu, Jun 23, 2016 at 2:21 PM
Subject: testing
To: RP <demo1@gmail.com>";

var pattern = @"(?<=From:[^\[]+\[mailto:\s)(?<Email>[^\]]+)";

Console.WriteLine(Regex.Match(data, pattern).Groups["Email"].Value); // demo@gmail.com