5

我正在寻找一个多行正则表达式,它将匹配空行之后的出现。例如,给定下面的示例电子邮件,我想匹配“发件人:亚历克斯”。 ^From:\s*(.*)$可以匹配任何 From 行,但我希望它仅限于正文中的行(第一个空白行之后的任何内容)。

收到:从服务器
日期:今天
致:特德
来自:詹姆斯
主题:[转发:嗨]

供参考

-  - - 转发消息  -  - -
致:詹姆斯
来自:亚历克斯
主题:你好

聚会!

4

4 回答 4

2

我不确定 C# 正则表达式的语法,但你应该有一种方法可以锚定到字符串的开头(而不是行的开头,例如 ^)。在我的示例中,我将其称为“\A”:

\A.*?\r?\n\r?\n.*?^From:\s*([^\r\n]+)$

确保打开多行匹配选项,但它有效,以制作“。” 匹配\n

于 2008-09-15T23:09:32.780 回答
0

为此类工作编写复杂的正则表达式是 IMO 的一个坏主意。最好结合几个简单的查询。例如,首先搜索“\r\n\r\n”以找到正文的开头,然后在正文上运行简单的正则表达式。

于 2008-09-15T23:09:17.787 回答
0

这是使用后视断言。第 1 组将为您提供“发件人”行,第 2 组将为您提供实际值(在您的示例中为“Alex”)。

(?<=\n\n).*(From:\s*(.*?))$
于 2008-09-15T23:12:57.497 回答
0
\s{2,}.+?(.+?From:\s(?<Sender>.+?)\s)+?

\s{2,}匹配至少两个空格字符,这意味着您的第一个 From: James 不会命中。然后只需寻找下一个“From:”并从那里开始捕获。

将此与RegexOptions.SingleLineand一起使用RegexOptions.ExplicitCapture,这意味着外部组不会命中。

于 2008-09-15T23:50:04.227 回答