替换包含特殊字符的字符串的精确部分

本文关键字:确部 字符串 特殊字符 替换 包含 | 更新日期: 2023-09-27 17:54:42

我试图用以下代码替换字符串的一部分:

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

提前感谢!

替换包含特殊字符的字符串的精确部分

不匹配字边界,而是匹配空格和/或字符串的开始/结束。

另外,您需要转义您的字符串,并从replace中删除单词边界(在我的情况下,空白和/或行开始/结束):您可以使用forward/backward来做到这一点。

所以说:

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

我做了一个演示小提琴