我正在尝试从" 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
。
答案 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