用于提取电子邮件数据的正则表达式模式

时间:2010-09-08 14:32:27

标签: c# regex multiline multilinestring

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

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

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

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

  

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

     

你好,来自regex的土地,我很高兴收到你的来信   ------原帖------
  元数据:...
  ...

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

     

真诚的,我。

我需要提取“来自正则表达式土地的你好,我很高兴收到你的来信。”和原始邮件之前的任何其他文本/行。

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

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

修改
我没有投票给任何人,如果你碰巧投票,那么包含评论通常会很有帮助。

3 个答案:

答案 0 :(得分:0)

为什么不使用DotnetOpenMail?使用正则表达式执行此操作是一种错误的方法,您最好使用专用的电子邮件处理程序....

答案 1 :(得分:0)

原因是你在括号内有一个额外的\n。如果正文是空白的,则没有额外的换行符。因此,试试这个:

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

如果你不想在身体末尾换行,你仍然可以在匹配的部分使用string.Trim()

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

答案 2 :(得分:-1)

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