使用Regex解析电子邮件响应

本文关键字:电子邮件 响应 Regex 使用 | 更新日期: 2023-09-27 18:07:05

我试图使用以下链接提供的解决方案以编程方式解析电子邮件响应:解析邮件内容

它在大多数情况下工作良好,除了gmail和outlook。它还选择发送者行:
2013年3月31日星期日上午10:57,<abc@domain.com>写道:

我不太理解regex,但是下面的一个应该正确地解析了它:

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

样本数据:
一定要读。'r'n' n'r' r'n' n' n' n nOn Sun, Mar 31, 2013 at 10:57 AM, <'r'n abc@domain.com>写:'r'n'r'n>

预期结果:
一定要读。

当前结果:
一定要读。在2013年3月31日星期日上午10:57,写:

使用Regex解析电子邮件响应

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

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

另外,使用惰性操作符而不是贪婪操作符:.* => .*?
提供的链接会告诉你原因。

Edit:正如我的注释所指定的,'r和'n不会被点匹配。它还说,建议您使用惰性操作符是非常愚蠢的,尽管我将允许它,因为它仍然是值得将来学习的知识。

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