1

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

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

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

示例电子邮件可能如下所示

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

您好,来自正则表达式领域,很高兴收到您的来信。
------原始消息-----
元数据: ...
...

嘿,正则表达式老兄,你能帮我吗?谢谢!

真诚的,我。

我需要提取“您好,来自正则表达式领域,我很高兴收到您的来信。” 以及原始消息之前的任何其他文本/行。

我现在正在使用这个正则表达式(多行模式下的 C#),它似乎可以工作,除了它正在捕获 ------原始消息----- 如果正文为空白。我宁愿只使用一个空白字符串。

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

编辑
我没有对任何人投反对票,如果您碰巧投反对票,包含评论通常会有所帮助。

4

3 回答 3

0

这样做的原因是\n括号内有一个额外的内容。如果正文为空白,则那里没有额外的换行符。因此,试试这个:

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

如果您不想在正文末尾换行,您仍然可以string.Trim()在匹配的部分上使用。

注意:这假定输入使用\r\n行终止符(根据 MIME 标准,在电子邮件标题中是必需的)。

于 2010-09-08T14:37:05.790 回答
-1

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

于 2010-09-08T14:35:39.880 回答
-1

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

于 2010-09-08T14:41:22.790 回答