我正在尝试使用以下代码替换部分字符串:
public static string SafeReplace(this string input, string find, string replace, bool matchWholeWord)
{
string textToFind = matchWholeWord ? string.Format(@"\b{0}\b", find) : find;
return Regex.Replace(input, textToFind, replace);
}
但是当我在字符串中有特殊字符时,这不起作用。我试过逃避角色,但没有运气......
这是一个例子,我有以下字符串:
Peter[='111222'] + APeter[='111222']
我想将Peter[='111222']
替换为@
,因此结果应为:
@ + APeter[='111222']
。使用给定的代码,字符串保持不变,没有任何变化。
请注意,我可能会遇到许多与Steven.intr[A:B;>1], Sssdf.len, asd.ind
等其他特殊字符不同的情况。所以在我的情况下,我需要找到不同格式的精确匹配。
提前致谢!
答案 0 :(得分:0)
不是匹配单词边界,而是匹配空格和/或字符串的结尾/结尾。这适用于非字母数字。
此外,您需要转义字符串,并从替换中删除单词边界(在我的情况下,空格和/或行的开头/结尾):您可以使用lookahead / lookbehind来执行此操作。
所以这一切都说:
public static string SafeReplace(this string input, string find, string replace, bool matchWholeWord)
{
string textToFind = matchWholeWord ? string.Format(@"(?<=^|\s){0}(?=$|\s)", Regex.Escape(find)) : Regex.Escape(find);
return Regex.Replace(input, textToFind, replace);
}