C# 替换包含特殊字符的字符串的确切部分

C# Replace exact part of string containing special characters

我正在尝试用以下代码替换部分字符串:

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 等其他特殊字符,我可能会遇到许多不同的情况。因此在我的情况下,我需要找到与不同格式完全匹配的内容。

提前致谢!

不匹配单词边界,而是匹配字符串的空格 and/or beggining/end。这将适用于非字母数字。

另外,你需要转义你的字符串,并从替换中删除单词边界(在我的例子中,空格 and/or begin/end 行):你可以使用 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);
}   

I've made a demonstrating fiddle