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

时间:2020-03-05 18:54:46  来源:igfitidea点击:

我正在寻找多行正则表达式,以匹配空行后的出现。例如,给定以下示例电子邮件,我想匹配"发件人:亚历克斯"。 ^ 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!

解决方案

回答

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

回答

我不确定Cregular表达式的语法,但是我们应该有一种锚定到字符串开头(而不是诸如^这样的行开头)的方法。在示例中,我将其称为" \ A":

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

确保打开多行匹配选项,但是可以使"。"起作用。匹配\ n

回答

这是使用后向断言。第1组将为我们提供"发件人"行,第2组将为我们提供实际值(在示例中为" Alex")。

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

回答

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

" \ s {2,}"至少匹配两个空格字符,这意味着第一个"发件人:詹姆斯"不会被点击。然后,只需查找下一个"发件人:"并从那里开始捕获即可。

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