0

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

它在大多数情况下都可以正常工作,除了 gmail 和 Outlook。它还选择发件人行:
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\n2013 年 3 月 31 日星期日上午 10:57,<\r\n abc@domain.com > 写道:\r\n\r \n>

预期结果:
请阅读。

当前结果:
请阅读。在 2013 年 3 月 31 日星期日上午 10:57,写道:

4

1 回答 1

1

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

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

此外,使用惰性运算符而不是贪婪运算符: .* => .*?
提供的链接将告诉您原因。

编辑:正如我的评论所指出的, \r 和 \n 不会被点匹配。它还说建议您使用惰性运算符非常愚蠢,尽管我会接受它,因为它仍然是未来值得拥有的知识。

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

于 2013-04-02T07:54:48.193 回答