我正在尝试替换字符串,但由于匹配单词很少,它正在替换字符串。
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。
怎么做?
答案 0 :(得分:1)
您可以使用Regex.Replace
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.Join创建新字符串。
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
答案 1 :(得分:1)
最简单的方法是使用Regex:
val3 = Regex.Replace(Regex.Replace(str, @"\bIS_PARENT\b", Val1), @"\bIS_CHILD\b", Val2);
答案 2 :(得分:1)
一种非常简单的方法是:
val3 = str.Replace("IS_PARENT", Val1 ).Replace(", IS_CHILD", ", "+val2);
但在那种情况下,为什么你不会这样做:
val3 = val1 + ", IS_CHILD_WITH_ROLE, " + val2;
str来自哪里?
答案 3 :(得分:0)
使用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;
}
在这种情况下,这可能是处理能力和内存消耗最少的方法。它也是最低级别的。
答案 4 :(得分:0)
您可以尝试在扩展方法中使用正则表达式来保留相同的语法样式:
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
答案 5 :(得分:0)
可能会有所帮助
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();
答案 6 :(得分:0)
像这样使用Body.Replace(&#34; \ bat \ b&#34;,&#34; at&#34;)