我正在从POP服务器检索原始文本(包括标题和消息)。我需要捕获标题之后的所有内容,标题由它与用户消息之间的空行终止。
同时,如果是回复,我想忽略原始邮件中的任何内容。我正在解析的电子邮件的回复开始于
------Original Message------
示例电子邮件可能如下所示
回程路径:...
...
更多电子邮件元数据:...你好,来自regex的土地,我很高兴收到你的来信 ------原帖------
嘿,正则表达的老兄,你能帮帮我吗?谢谢!
元数据:...
...真诚的,我。
我需要提取“来自正则表达式土地的你好,我很高兴收到你的来信。”和原始邮件之前的任何其他文本/行。
我现在正在使用这个正则表达式(多线模式下的C#)它似乎工作,除了它正在捕获------原始消息------如果正文是空白的。我宁愿换一个空字符串。
^\s*$\n(.*)(\n------Original Message------)?
修改
我没有投票给任何人,如果你碰巧投票,那么包含评论通常会很有帮助。
答案 0 :(得分:0)
为什么不使用DotnetOpenMail?使用正则表达式执行此操作是一种错误的方法,您最好使用专用的电子邮件处理程序....
答案 1 :(得分:0)
原因是你在括号内有一个额外的\n
。如果正文是空白的,则没有额外的换行符。因此,试试这个:
^\s*$\r\n(.*)(^------Original Message------$)?
如果你不想在身体末尾换行,你仍然可以在匹配的部分使用string.Trim()
。
注意:这假设输入使用\r\n
行终止符(根据MIME标准在电子邮件标题中是必需的)。
答案 2 :(得分:-1)
您需要将(\n------Original Message------)
替换为(?=(\n------Original Message------))
预测不返回该部分,只是为了确保它在那里