2008-09-15 50 views
5

我正在尋找一個多行正則表達式,它將匹配空行後的出現次數。例如,下面給出一個示例電子郵件,我想匹配「From:Alex」。 ^From:\s*(.*)$可以匹配任何From行,但我希望它被限制在主體中的行(第一個空白行之後的任何內容)。多行C#正則表達式在空行後匹配

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

fyi 

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

Party! 

回答

2

我不確定C#正則表達式的語法,但您應該有一種方法來錨定到字符串的開頭(而不是像^這樣的行的開始處)。我稱之爲「\ A」在我的例子:

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

確保您打開多匹配選項,但這樣的作品,使「」匹配\ n

+0

謝謝。我需要的是打開單線模式,並使用。*?代替 。*。 – user10392 2008-09-15 23:22:23

0

爲這樣的作業寫複雜的正則表達式是一個壞主意IMO。最好將幾個簡單的查詢結合起來。例如,首先搜索「\ r \ n \ r \ n」以查找主體的開頭,然後在主體上運行簡單的正則表達式。

0

這是使用後視斷言。第1組會給你「From」行,第2組會給你實際的值(在你的例子中是「Alex」)。

(?<=\n\n).*(From:\s*(.*?))$ 
0
\s{2,}.+?(.+?From:\s(?<Sender>.+?)\s)+? 

\s{2,}比賽至少有兩個空格字符,這意味着你的第一來源:詹姆斯不會打。然後,只需要尋找下一個「From:」並開始從那裏捕捉。

將此與RegexOptions.SingleLineRegexOptions.ExplicitCapture一起使用,這意味着外部組不會被擊中。