[英]How to exclude some strings in C# Regex?
这是我当前的代码:
var formula = "Scan: \"sample.test\" OR 'batch.id' AND if (results.tune)))";
if (formula.IndexOf("field(", StringComparison.OrdinalIgnoreCase) == -1)
{
formula = Regex.Replace(formula, "[a-zA-Z]\\w+\\.[a-zA-Z_]\\w*", "field(\"$0\")");
}
输出如下:
"Scan: \"field(\"sample.test\")\" OR 'field(\"batch.id\")' AND if (field(\"results.tune\"))))"
但是,我想跳过前两场比赛。 因此,如果引用了一个术语,请不要替换它。 预期的输出应如下所示:
"Scan: \"sample.test\" OR 'batch.id' AND if (field(\"results.tune\"))))"
我设法通过两次通过获得了预期的结果:
var formula = "Scan: \"sample.test\" OR 'batch.id' AND if (results.tune)))";
if (formula.IndexOf("field(", StringComparison.OrdinalIgnoreCase) == -1)
{
formula = Regex.Replace(formula, "[a-zA-Z]\\w+\\.[a-zA-Z_]\\w*", "field(\"$0\")");
formula = Regex.Replace(formula, "([\"|'])field\\(\"([a-zA-Z]\\w+\\.[a-zA-Z_]\\w*)\"\\)\\1", "$1$2$1");
}
但是,我相信应该可以一次使用正则表达式排除功能,但我不知道该怎么做。
您也许可以使用负面的环顾四周和字词边界来提供帮助:
(?<![""'])\b[a-zA-Z]\w+\.[a-zA-Z_]\w*\b(?![""'])
另外,您可以使用@
避免很多事情加倍转义:
formula = Regex.Replace(formula, @"(?<![""'])\b[a-zA-Z]\w+\.[a-zA-Z_]\w*\b(?![""'])", "field(\"$0\")");
(?<![""'])
在后面是负数,这可以确保第一个匹配项之前的字符不是引号。
(?![""'])
是否定的前瞻,与后面的回顾有点相似,不同之处在于它会检查以下字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.