如何替换精确匹配的字符串只使用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。
怎么做?
可以使用正则表达式。替换
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","在")