我正在寻找一个多行正则表达式,它将匹配空行后的出现次数。例如,给出下面的示例电子邮件,我想匹配“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!
答案 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.SingleLine
和RegexOptions.ExplicitCapture
一起使用,这意味着外部群组不会被点击。