C# 多个单词中具有相同值的字符串中的Regex Replace
我想用引号替换字符串C# 多个单词中具有相同值的字符串中的Regex Replace,c#,regex,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 + "\"") 在替换以下字符串时,
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"
名称是单独的字符串,所有者名称是单独的字符串。当尝试替换名称字符串时,另一个字符串将自动被替换,因为第二个字符串中包含单词name
如果有什么解决办法,请告诉我。提前谢谢。您需要确保先放长一点的。您可以创建列名列表,按长度降序排序,并构建一个替代组以形成类似正则表达式的
\b(?:owner-name|owner|name)\b
看。请注意,从左到右检查备选方案,一旦存在匹配项,将跳过下一个备选方案
以下是以动态方式处理项目的代码段(请参阅):
var ColumnNames=新列表{“所有者”、“名称”、“所有者名称”};
ColumnNames=ColumnNames.OrderByDescending(x=>x.Length.ToList();
var s=“从XXX中选择abc.name、abc.owner-name”;
var pattern=$@“\b(?:{string.Join(|“,ColumnNames)})\b”;
var result=Regex.Replace(s,pattern,“\”$&\”);
控制台写入线(结果);
//=>从XXX中选择abc.“名称”,abc.“所有者名称”
确保转义不需要的字符串/字符
\b[^-]name\b
此处转义'-'
,它位于[]
内,并匹配字符串“名称
”
使用来测试表达式。创建一个列名列表,按长度降序排序,构建一个替代组,如
$@“\b(?:{string.Join(“|”),ColumnNames})\b”
并替换为“\”$&\”
\b[^-]name\b
匹配任何以单词边界开头的字符串,然后是除-
以外的任何字符,然后是名称
,后跟单词边界。例如,它将匹配“他的名字”
中的“名字”
。你在这里什么也逃不了。我不确定这个答案是否相关,为什么你建议“逃离”“不想要的”字符?问题中没有关于特殊字符的内容。
\b[^-]name\b