5

空白行の後の出現に一致する複数行の正規表現を探しています。たとえば、以下のサンプル メールの場合、「差出人: アレックス」に一致させたいと考えています。 ^From:\s*(.*)$任意の From 行に一致するように機能しますが、本文の行 (最初の空白行以降) に限定したいと考えています。

受信: サーバーから
日付: 今日
宛先: テッド
投稿者: ジェームズ
件名: [fwd: こんにちは]

ご参考までに

-  - - 転送メッセージ  -  - -
宛先: ジェームズ
差出人:アレックス
件名: こんにちは

パーティ!

4

4 に答える 4

2

C# の正規表現の構文はよくわかりませんが、文字列の先頭 (^ などの行の先頭ではなく) に固定する方法が必要です。私の例では、それを「\A」と呼びます。

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

ただし、複数行一致オプションをオンにして、「。」を作成してください。一致 \n

于 2008-09-15T23:09:32.780 に答える
0
\s{2,}.+?(.+?From:\s(?<Sender>.+?)\s)+?

\s{2,}少なくとも2つの空白文字に一致します。つまり、最初のFrom:Jamesはヒットしません。次に、次の「From:」を探して、そこからキャプチャを開始するだけです。

これをRegexOptions.SingleLineandと一緒に使用しますRegexOptions.ExplicitCapture。これは、外側のグループがヒットしないことを意味します。

于 2008-09-15T23:50:04.227 に答える
0

そのような仕事のために複雑な正規表現を書くことは、IMO の悪い考えです。いくつかの単純なクエリを組み合わせることをお勧めします。たとえば、最初に「\r\n\r\n」を検索して本文の先頭を見つけ、次に本文に対して単純な正規表現を実行します。

于 2008-09-15T23:09:17.787 に答える
0

これは後読みアサーションを使用しています。グループ 1 は「From」行を提供し、グループ 2 は実際の値 (この例では「Alex」) を提供します。

(?<=\n\n).*(From:\s*(.*?))$
于 2008-09-15T23:12:57.497 に答える