1

文字列内のスペース間のテキストを抽出する必要があります。以下のサンプルでは、​​「401900 PRE」というテキストを Recipe という名前のグループに抽出しようとしています。グループ Recipe は、文字 PRE の後に空白を返してはなりません。これが私が現時点で持っているものです。「401900 PRE Current User」が画面に出力されます。PRE の後に停止する方法がわかりません。

401900 PRE テキストは定期的に変更されますが、他のテキスト要素は一定です。

        string recipe = "<OPERATE MODE> - 401900 PRE    Current User";

        Regex regex = new Regex(@".*<OPERATE MODE> - (?'Recipe'.*\ *)");
        MatchCollection mc = regex.Matches(recipe);

        foreach (Match m in mc)
        {
            Console.WriteLine(m.Groups["Recipe"]);
        }

        Console.ReadLine();

ありがとう。

4

2 に答える 2

2

パターンに一致させたくない定数を含めるだけです。

@".*<OPERATE MODE> - (?'Recipe'.*?)\s+Current User"

グループ内での繰り返しをungreedyにする必要があることに注意してください。そうしないと、スペースの一部が消費されます。

于 2013-08-28T20:03:38.910 に答える
2

パターン

<OPERATE MODE> - (?'Recipe'.*?)\s{2}

動作するはずです。これは、最初の 2 つの空白文字で停止する<OPERATE MODE> -グループでキャプチャされた任意のテキストが後に続くリテラルに一致します。Recipe

例えば:

string recipe = "<OPERATE MODE> - 401900 PRE    Current User";

Regex regex = new Regex(@"<OPERATE MODE> - (?'Recipe'.*?)\s{2}");
MatchCollection mc = regex.Matches(recipe);

foreach (Match m in mc)
{
    Console.WriteLine(m.Groups["Recipe"]);  // 401900 PRE
}
于 2013-08-28T20:04:58.187 に答える