C#正则表达式捕获组不工作
在下面的代码中,我想捕获任何以test开头,后面是用双引号括起来的文本的内容。例如C#正则表达式捕获组不工作,c#,regex,capturing-group,regex-group,C#,Regex,Capturing Group,Regex Group,在下面的代码中,我想捕获任何以test开头,后面是用双引号括起来的文本的内容。例如 测试“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
测试“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.Value);
}
}
然后,从上面的捕获中,我想捕获单词测试之后的子表达式(在上面的示例中,这些子表达式将是“abc”和“rst”,包括)。我尝试了以下方法,它正确地给出了我:
“abc”
“rst”
问题:现在我想捕捉两个子表达式1.“abc”和“rst”2.除了匹配测试“abc”和测试“rst”之后的“abc”以外的任何字符。因此,我尝试了以下操作,但如下所示,匹配“rst”“uvw”的组1和组2是错误的。我需要“rst”“uvw”的组1是“rst”第2组为空,因为“rst”后面的字符是:
第一组:“abc”
第2组:=
第1组:“rst”
第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);
}
}
你一定在找我
test("[^"]*")([^"])?
看
我做了两个改变:
- 使用了否定字符类
(匹配0个或多个字符而不是双引号),而不是将任何字符与[^”]*
*?
- 使用
量词使?
可选[^”]
(?<=test)("[^"]+")([^"])?
(?会做完全相同的事情,除了最后一个?
如果你把它放在组内,看起来更直观。把?放在组内会改变下一个组的组号(如果有)。我喜欢在组外的group@stribizhev,谢谢。它起作用了。在我的C代码中,我不得不逃离“要做到这一点:test(\”[^\“]*\”([^\“])?
@nam:您最好使用逐字字符串literalvar rx=new Regex(@“test”(“[^”“]*”)([^”“])?”;
。
(?<=test)("[^"]+")([^"])?
(?<=test)("[^"]+"[^"]?)