多行C#正则表达式匹配空行后

时间:2008-09-15 23:03:18

标签: regex

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

Received: from a server
Date: today
To: Ted
From: James
Subject: [fwd: hi]

fyi

----- Forwarded Message -----
To: James
From: Alex
Subject: hi

Party!

4 个答案:

答案 0 :(得分:2)

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

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

确保打开多线匹配选项,无论多么有效,都可以使用“。”匹配\ n

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

(?<=\n\n).*(From:\s*(.*?))$

答案 3 :(得分:0)

\s{2,}.+?(.+?From:\s(?<Sender>.+?)\s)+?

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

RegexOptions.SingleLineRegexOptions.ExplicitCapture一起使用,这意味着外部群组不会被点击。