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

时间:2016-07-05 09:23:13

标签: c# special-characters string.format

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

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等其他特殊字符不同的情况。所以在我的情况下,我需要找到不同格式的精确匹配。

提前致谢!

1 个答案:

答案 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);
}   

I've made a demonstrating fiddle