我必须动态构建过滤器表达式。这就是我想匹配和替换过滤器的原因。例如,我有以下字符串:
string input = " (Country = \"Brazil\" OR Country = \"Canada\") AND CompanyName.Contains(\"Contoso\") ";
我想替换CompanyName.Contains(\" Contoso \"),其中公司名称可能有不同的名称。
这是我的代码:
string input = " (Country = \"Brazil\" OR Country = \"Canada\") AND CompanyName.Contains(\"Contoso\") ";
string replacement = "123456";
string pattern = @"(CompanyName.Contains\()";
// \"[^\"]*\"
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
Console.WriteLine(result);
似乎我的过滤器表达式错误。应该是什么?
答案 0 :(得分:1)
在您的表达式中,点不会被转义,只会在开场CompanyName.Contains("Contoso")
后立即与所需的(
部分匹配。
您可以使用
var pattern = @"\bCompanyName\.Contains\([^()]*\)";
请参阅regex demo
\b
匹配单词边界,转义点与文字点匹配,\([^()]*\)
与(
匹配,后跟除(
和{{1}以外的0+个字符(由于否定的字符类)
)。