在下面的代码中,我想捕获以test开头的所有内容,然后是双引号括起来的文本。 E.g。
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"包括&# 34;我尝试了以下内容,它正确地给了我:
"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.除了"在比赛测试之后" abc"并测试" rst"。所以,我尝试了以下内容,但如下图所示,第1组和第2组用于比赛" rst"" uvw"错了。我需要第一组"第一"" uvw"成为" 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);
}
}
答案 0 :(得分:1)
你一定在寻找
test("[^"]*")([^"])?
请参阅demo
我做了两处修改:
[^"]*
(匹配双引号以外的0个或多个字符),而不是使用.*?
[^"]
可选?
量词。答案 1 :(得分:0)
两个备用版本:
(?<=test)("[^"]+")([^"])?
如果您想将结果保存在一个地方:
(?<=test)("[^"]+"[^"]?)