2

次のコードでは、test で始まり、その後に二重引用符で囲まれたテキストが続くものをすべてキャプチャします。例えば

test"abc"

test"rst"

コードは正常に動作します。

private void testRegex()
{
    string st = "this test\"abc\"= or test\"rst\"\"uvw\" or test(def)(abc) is a test.";
    Regex oRegex = new Regex("test\".*?\"");

    foreach (Match mt in oRegex.Matches(st))
    {
        Console.WriteLine(mt.Value);
    }
}

次に、上記のキャプチャから、単語 test に続く部分式をキャプチャしたいと思います (上記の例では、これらの部分式は "abc" と "rst" で、" を含みます。次のことを試してみたところ、正しく表示されます:

"abc"

"rst"

private void testRegex()
    {
        string st = "this test\"abc\"= or test\"rst\"\"uvw\" or test(def)(abc) is a test.";
        Regex oRegex = new Regex("test(\".*?\")");

        foreach (Match mt in oRegex.Matches(st))
        {
            Console.WriteLine(mt.Groups[1].Value);
        }
    }

質問: ここで、2 つの部分式 1. "abc" と "rst" 2. 一致する test"abc" と test"rst" に続く " 以外のすべての文字をキャプチャしたいと考えています。 "rst""uvw" に一致するグループ 1 と 2 が間違っています。"rst""uvw" のグループ 1 を "rst" にし、グループ 2 を空にする必要があります。"rst" に続く文字は ":

グループ 1: "abc"

グループ 2: =

グループ1:「最初」

グループ 2: う

private void testRegex()
        {
            string st = "this test\"abc\"= or test\"rst\"\"uvw\" or test(def)(abc) is a test.";
            Regex oRegex = new Regex("test(\".*?\")([^\"])");

            foreach (Match mt in oRegex.Matches(st))
            {
                Console.WriteLine(mt.Groups[1].Value);
                Console.WriteLine(mt.Groups[2].Value);
            }
        }
4

2 に答える 2

1

あなたが探しているに違いない

test("[^"]*")([^"])?

デモを見る

私は2つの変更を加えました:

  • 任意の文字を遅延照合する代わりに、否定文字クラス[^"]*(二重引用符以外の 0 個以上の文字に一致) を使用しました。.*?
  • 量指定子で[^"]オプションにしまし?た。

ここに画像の説明を入力

于 2015-07-26T20:24:04.790 に答える