使用Regex解析电子邮件回复

时间:2013-04-02 07:47:57

标签: c# regex email-parsing

我尝试使用以下链接中提供的解决方案以编程方式解析电子邮件回复: Parse email content from quoted reply

除了gmail和outlook之外,它在大多数情况下都能正常工作。它还会选择发件人行:
在Sun,2013年3月31日上午10:57,< abc@domain.com>写道:

我不太了解正则表达式,但下面的一个应该正确解析它:

new Regex("From:\\s*" + Regex.Escape(address), RegexOptions.IgnoreCase)
new Regex("\\n.*On.*(\\r\\n)?wrote:\\r\\n", RegexOptions.IgnoreCase | RegexOptions.Multiline)

样本数据:
请阅读。\ r \ n \ r \ n \ r \ n日期:2013年3月31日上午10:57,< \ r \ n \ abc@domain.com>写道:\ r \ n \ r \ n>

预期结果:
请仔细阅读。

当前结果:
读它。在Sun,2013年3月31日上午10:57,写道:

1 个答案:

答案 0 :(得分:1)

使用捕获组获取此匹配的一部分:

new Regex("\\n(.*)[\\r\\n]*On(?:.|\\r|\\n)*?wrote:\\r\\n", RegexOptions.IgnoreCase | RegexOptions.Multiline)

另外,使用lazy operators代替贪婪的:。* => 。*?
提供的链接将告诉您原因。

编辑:根据我的评论指定,\ r和\ n不会被点匹配。它还说,建议你使用懒惰的操作符是非常愚蠢的,虽然我会让它,因为它仍然值得拥有未来的知识。

Edit2:实际上它不是正则表达式的第二部分。编辑。