2008-09-15 8 views
5

空白行の後に出現するものと一致する複数行正規表現を探しています。たとえば、下記のサンプルメールを見ると、「From:Alex」と一致したいと思います。 ^From:\s*(.*)$はFrom行と一致するように動作しますが、本文の行(最初の空白行の後ろにある行)に制限します。Multiline 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

0

このようなジョブの複雑な正規表現を書くことは、悪い考えです。いくつかの簡単なクエリを組み合わせる方が良いでしょう。たとえば、最初に "\ 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でこれを使用します。これは、外側のグループがヒットしないことを意味します。

関連する問題