提取电子邮件数据的正则模式
-
01-10-2019 - |
题
我正在从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不返回那部分,只是为了确保它在那里
不隶属于 StackOverflow