多行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一起使用,这意味着外部组不会命中。