繁体   English   中英

如何在C#正则表达式中排除一些字符串?

[英]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");
        }

但是,我相信应该可以一次使用正则表达式排除功能,但我不知道该怎么做。

您想要的是非捕获组 形成正则表达式,以便您可以根据(仅捕获)正则表达式中的组来编写最终表达式。 然后调用Regex.Replace,排除非捕获组。 在这里查看我使用此技术的其他答案。

您也许可以使用负面的环顾四周和字词边界来提供帮助:

(?<![""'])\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM