次のコードでは、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);
}
}