我正在从POP服务器中检索原始文本(包括标题和消息)。我需要在标题之后捕获所有内容,该标题由其与用户消息之间的空白行终止。

同时,如果是回复,我想忽略原始消息中的任何内容。我要解析的电子邮件的答复开始

------Original Message------

一个示例电子邮件可能看起来像这样

返回路径:...
...
更多电子邮件元数据:...

您好,从Regex Land那里,我很高兴收到您的来信。
- - - 原始信息 - - -
元数据:...
...

嘿,正则伙计,你能帮我吗?谢谢!

真诚的,我。

我需要提取“从Regex Land中提取您,我很高兴收到您的来信。”以及原始消息之前的任何其他文本/行。

我现在正在使用此正则发行(在多行模式下C#),除了捕获------原始消息-------如果身体为空白,它似乎有效。我宁愿只有一个空白的字符串。

^\s*$\n(.*)(\n------Original Message------)?

编辑
我还没有投票给任何人,如果您碰巧投票,则包括评论通常会很有帮助。

有帮助吗?

解决方案

你为什么不使用 dotnetopenmail?使用正则表达式是一种错误的方法,最好使用专用的电子邮件处理程序。

其他提示

这样做的原因是您有额外的 \n 括号内。如果身体是空白的,那里就没有额外的新线。因此,请尝试以下操作:

^\s*$\r\n(.*)(^------Original Message------$)?

如果您不希望身体末端的新线,您仍然可以使用 string.Trim() 在匹配的部分。

笔记: 假设输入使用 \r\n 线路终止器(根据MIME标准在电子邮件标题中需要)。

您需要替换 (\n------Original Message------)(?=(\n------Original Message------)) lookahead不返回那部分,只是为了确保它在那里

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top