正则表达式用多个单词中的相同值替换字符串

时间:2018-07-26 08:52:15

标签: c# regex

我想用引号替换字符串。

Mystring如下所示:

var query = "SELECT abc.name,abc.owner-name FROM XXX";

我要替换字符串如下。预期结果

SELECT abc."name",abc."owner-name" FROM XXX

我正在使用正则表达式代码,如下所示:

Regex.Replace(query, $@"\b{column.ColumnName}\b", "\"" + column.ColumnName + "\"")

在替换以下字符串的同时获得结果-

SELECT abc."name",abc."owner-"name"

名称是单独的字符串,所有者名称是单独的字符串。尝试替换名称字符串时,另一个将自动替换,因为第二个字符串中包含单词名称。

请告诉我是否有解决方案。预先感谢。

2 个答案:

答案 0 :(得分:4)

您需要确保较长的优先。您可以创建一个列名列表,按长度降序排序,并建立一个替代组以形成正则表达式,如

\b(?:owner-name|owner|name)\b

请参见how this regex will work。请注意,从左到右检查替代项,一旦匹配,将跳过下一个替代项。

以下是以动态方式处理项目的代码段(请参见online C# demo):

var ColumnNames = new List<string> { "owner", "name", "owner-name"};
ColumnNames = ColumnNames.OrderByDescending(x => x.Length).ToList();
var s = "SELECT abc.name,abc.owner-name FROM XXX";
var pattern = $@"\b(?:{string.Join("|", ColumnNames)})\b";
var result = Regex.Replace(s, pattern, "\"$&\"");
Console.WriteLine(result);
// => SELECT abc."name",abc."owner-name" FROM XXX

答案 1 :(得分:0)

确保您转义了不需要的字符串/字符

\b[^-]name\b

此处转义'-'内的[]并匹配字符串“ name

使用Regex tester来测试表达式。