简而言之: @"^(?!Debug\("")([^""]*""(?<Text>[^""]*)"")*.*$"
它能做什么:
- 不匹配以开头的字符串
Debug("
- 沿着绳子跑,直到遇到第一个
"
,然后越过它
- 如果
"
没有找到 a 并且它到达了字符串的末尾,它将停止。
- 开始“录制”到一个名为
Text
- 沿着字符串运行,直到遇到下一个
"
,停止录制,然后越过它。
- 返回步骤 2
结果:"
您在一个名为 的组中拥有 ' 之间的所有字符串Text
。
剩下要做的事情:将其转换为多行正则表达式并在 Debug 之前支持 whitepsaces ( \s
) 作为更好的过滤器。
进一步的使用示例和测试:
var regex = new Regex(@"^(?!Debug\("")([^""]*""(?<Text>[^""]*)"")*.*$");
var inputs = new[]
{
@"string a = ""something"";",
@"sring b = ""something else"" + "" more"";",
@"Print(""this should match"");",
@"Print(""So"" + ""should this"");",
@"Debug(""just some bebug text"");",
@"Debug(""more "" + ""debug text"");"
};
foreach (var input in inputs)
{
Console.WriteLine(input);
Console.WriteLine("=====");
var match = regex.Match(input);
var captures = match.Groups["Text"].Captures;
for (var i = 0; i < captures.Count; i++)
{
Console.WriteLine(captures[i].Value);
}
Console.WriteLine("=====");
Console.WriteLine();
}
输出:
string a = "something";
=====
something
=====
sring b = "something else" + " more";
=====
something else
more
=====
Print("this should match");
=====
this should match
=====
Print("So" + "should this");
=====
So
should this
=====
Debug("just some bebug text");
=====
=====
Debug("more " + "debug text");
=====
=====