【发布时间】:2013-04-10 00:50:30
【问题描述】:
我在这方面苦苦挣扎了一段时间,请您给点提示...
在 Outlook 电子邮件中,我们可以将电子邮件正文中的电子邮件信息转发为:
From: Jackson, Peter
Sent: Tuesday, 26 March 2013 08:25 PM
To: **Match, Me**; GGG
Cc: AAA, BBB; CCC, DDD; EEE, FFF
Subject: FW: Good Morning
或
From: Jackson, Peter
Sent: Tuesday, 26 March 2013 08:25 PM
To: AAA; GGG
Cc: BBB; **Match, Me**; DDD; EEE, FFF
Subject: FW: Good Morning
现在,如果“收件人”或“抄送”列表中有“匹配,我”,我想在“已发送”中获取日期时间。
我现在拥有的正则表达式是:
(<b>)?Sent:(</b>)?\s(?<MatchDateTime>[A-Z][a-z]{5,8},\s[0-9]{1,2}\s[A-Z][a-z]{2,9}\s[0-9]{4}\s[0-9{1,2}:[0-9][0-9]\s[A-Z]{2})(<br\s?/?>)?(\\r\\n)*?(<b>)?To:(</b>)?\s.[^<]*?(Match, Me).*?(<br\s?/?>)?(\\r\\n)*?(<b>)?Cc:(</b>)?\s.[^<]*?(Match, Me).*?(<br\s?/?>)(\\r\\n)*
这里是一些示例文本:
<span lang=\"EN-US\" style=\"font-size:10.0pt;font-family:"Tahoma","sans-serif"\"> BBB, AAA [mailto:AAA.BBB@ccc.com.au]\r\n<br>\r\n<b>Sent:</b> Tuesday, 26 March 2013 5:23 PM<br>\r\n<b>To:</b> **Match, Me**; DDD; EEE<br>\r\n<b>Cc:</b> EEE, ZZZ; GGG, FFF<br>\r\n<b>Subject:</b> RE: Good Morning<o:p></o:p></span>
或
<span lang=\"EN-US\" style=\"font-size:10.0pt;font-family:"Tahoma","sans-serif"\"> BBB, AAA [mailto:AAA.BBB@ccc.com.au]\r\n<br>\r\n<b>Sent:</b> Tuesday, 26 March 2013 5:23 PM<br>\r\n<b>To:</b> UUU, AAA, DDD; EEE<br>\r\n<b>Cc:</b> Match, Me; ZZZ; GGG, FFF<br>\r\n<b>Subject:</b> RE: Good Morning<o:p></o:p></span>
我的正则表达式只能匹配一个条件(在 To list 或 Cc list 中),但不能同时匹配两者,请您帮忙,谢谢!
【问题讨论】:
-
不要使用 RegEx 解析 HTML/XML。请改用 XML/HTML 解析器。如LINQ to XML或HTML Agility Pack。
-
一般来说,您正在寻找管道字符jsfiddle.net/b9chris/8xMAm - 因为您可能知道 JS 和 C# 使用相同的正则表达式标准,因此正则表达式字符串在两者之间是兼容的。但是以这种方式使用单个正则表达式似乎太复杂了 - 将其分解为几个更简单的部分,您可能会获得的几毫秒额外性能不值得下一个编码人员使用此代码是多么不可能修改。
-
您好,感谢您的回复。由于这是现有工作的新功能,不幸的是我必须坚持在 C# 中使用 Regex.Matches,对我来说唯一的选择可能是 Regex。