在下面的代码中,我想捕获以 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);
}
}
问题:现在我想捕获两个子表达式 1.“abc”和“rst” 2.除了匹配 test“abc”和 test“rst”之外的任何字符。所以,我尝试了以下但如下所示匹配“rst”“uvw”的第 1 组和第 2 组是错误的。我需要“rst”“uvw”的第 1 组为“rst”,第 2 组为空,因为“rst”后面的字符是“:
第 1 组:“abc”
第 2 组:=
第一组:“第一”
第 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);
}
}