如何替换精确匹配的字符串只使用2替换

本文关键字:替换 字符串 何替换 | 更新日期: 2023-09-27 17:51:24

我正在尝试替换字符串,但由于匹配的单词很少,它正在替换两个字符串。

Val1 = "CASE WHEN [" + isParent + "] = 0 THEN 'False' WHEN [" + isParent + "] = 1 THEN 'True' END ";
Val2 = "CASE WHEN [" + isChild + "] = 0 THEN 'False' WHEN [" + isChild  + "] = 1 THEN 'True' END ";
val3 = str.Replace("IS_PARENT", Val1 ).Replace("IS_CHILD", val2);
在我的

str = "IS_PARENT, IS_CHILD_WITH_ROLE, IS_CHILD"; 

IS_CHILD出现在两个地方,所以它同时替换了两个IS_CHILD。

我想只替换精确的单词IS_CHILD。

怎么做?

如何替换精确匹配的字符串只使用2替换

可以使用正则表达式。替换

string newString = Regex.Replace(str, @"'bIS_CHILD'b", replacedText);

编辑:如果你想用与IS_CHILD 相同的条件替换IS_PARENT

string  newString = Regex.Replace(newString, @"'bIS_PARENT'b", "NEW TEXT");
newString = Regex.Replace(str, @"'bIS_CHILD'b", replacedText);

(这不是优化的,因为它是替换单个单词的一种方法)

可以根据空格分割字符串,然后使用string。连接以在替换完整单词后创建一个新字符串。

string str = "IS_PARENT, IS_CHILD_WITH_ROLE, IS_CHILD";
string replacedText = "SomeThing";
string newString = string.Join(" ", str.Split()
                                       .Select(r => r == "IS_CHILD" ? replacedText : r));

新字符串将是:

IS_PARENT, IS_CHILD_WITH_ROLE, SomeThing

最简单的方法是使用Regex:

val3 = Regex.Replace(Regex.Replace(str, @"'bIS_PARENT'b", Val1), @"'bIS_CHILD'b", Val2);

一个非常简单的方法是:

val3 = str.Replace("IS_PARENT", Val1 ).Replace(", IS_CHILD", ", "+val2);

但是在这种情况下,你为什么不直接写:

val3 = val1 + ", IS_CHILD_WITH_ROLE, " + val2;

STR是从哪里来的?

您可以尝试在扩展方法中使用正则表达式来保持相同的语法样式:

public static class Extensions
{
    public static string ReplaceExact(this string value, 
                                      string oldWord, string newWord)
    {
        Regex r = new Regex(string.Format(@"'b{0}'b", oldWord));
        return r.Replace(value, newWord);
    }
}

并使用:

string str = "IS_CHILD, IS_CHILD ,IS_CHILD, IS_PARENT, IS_CHILD_WITH_ROLE, IS_CHILD";
string result = str.ReplaceExact("IS_CHILD", "000")
                   .ReplaceExact("IS_PARENT", "111");
Console.WriteLine(result); 
//prints: 000, 000 ,000, 111, IS_CHILD_WITH_ROLE, 000

这可能会有帮助

string child = "IS_PARENT, IS_CHILD_WITH_ROLE, IS_CHILD", 
       resultString = string.Empty;
List<string> chunks = child.Split(' ').ToList();
chunks.ForEach(delegate(string i)
{
   if (string.Equals(i, "IS_CHILD", StringComparison.CurrentCultureIgnoreCase))
      resultString += "ReplaceString ";
   else
      resultString += i + " ";
});
Console.WriteLine(child);
Console.WriteLine(resultString);
Console.Read();

使用LastIndexOf,手动切断字符串并在正确的位置插入替换。这样的:

Val1 = "CASE WHEN [" + isParent + "] = 0 THEN 'False' WHEN [" + isParent + "] = 1 THEN 'True' END ";
Val2 = "CASE WHEN [" + isChild + "] = 0 THEN 'False' WHEN [" + isChild  + "] = 1 THEN 'True' END ";
ReplaceLast(str, "IS_PARENT", Val1 );
ReplaceLast(str, "IS_CHILD", Val2 );
public static string ReplaceLast(this string value, 
                                      string oldWord, string newWord)
{
    int index = value.LastIndexOf(oldWord);
    String modified = value.Remove(index, oldWord.Length);
    modified = modified.Insert(index, newWord);
    return modified;
}

在这种情况下,这可能是处理能力和内存消耗最少的方法。

像这样使用Body。替换("'蝙蝠' b","在")