1

次の問題があります。

開発者が使用するツールからの txt ファイル出力を解析しようとしています

ここに私が見ているファイルのスニペットがあります


 DAT1                DAT(IL)
:NAME            R|OM_SW_1_ILP|AG

ここで私がする必要があるのは、次のテキストを検索して、それに対応するDAT1テキストと一致させることです:NAMEDAT

ここに私が使用している正規表現パターンがありますがDAT、名前ではないようです。

^(?<number>DAT[0-9]{1,3}).*(?<name>:NAME)?

私はexpressoを使用してさまざまな組み合わせをテストしましたが、どれも機能しませんでした

助けてください

4

3 に答える 3

2

使用できますRegexOptions.Singleline

単線

シングルライン モードを指定します。ドット (.) の意味を変更して、(\n を除くすべての文字ではなく) すべての文字に一致するようにします。

複数の行にわたってパターンを一致させるため。

また、 ののテキストを見つけるために、肯定的な後読みを探しています。 :NAME


例:

void Main()
{
    var s = @"DAT1                DAT(IL)
              :NAME            R|OM_SW_1_ILP|AG";
    var p =  @"^(?<number>DAT[0-9]{1,3}).*(?<=:NAME\s+)(?<name>[^\s]*)";
    var m = Regex.Match(s, p, RegexOptions.Singleline);
    m.Groups["number"].Value.Dump();
    m.Groups["name"].Value.Dump();
}

結果:

DAT1
R|OM_SW_1_ILP|AG

于 2012-10-22T14:49:41.883 に答える
1

:NAME...新しい行にあるはずですか?その場合、RegexOptions.Multilineオプションを設定するか、改行を明示的に一致させる必要があります。たとえば 、 は改行と一致しない[\r\n]+ためです。.

また、.*非貪欲にする .*?ことを検討してください。

于 2012-10-22T14:21:48.557 に答える
0

single line mode必要なデータを一致させるために使用する必要があります

(?<number>DAT[0-9]{1,3})(?<reqData>.*?)(?<name>:NAME)

//reqData group now contains your data

^他のデータを含む可能性のあるテキスト ファイル内のテキストを照合するため、ここで使用する必要はありません。

于 2012-10-22T15:00:54.000 に答える