我想用引号替换字符串。
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"
名称是单独的字符串,所有者名称是单独的字符串。尝试替换名称字符串时,另一个将自动替换,因为第二个字符串中包含单词名称。
请告诉我是否有解决方案。预先感谢。
答案 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)