首页 > 解决方案 > 当单词以方括号等特殊字符开头或结尾时,单词边界不匹配

问题描述

我想用另一个数字替换作为方括号的字符串。我正在使用正则表达式替换方法。

样本输入:

这是[测试]版本。

所需输出(将“[test]”替换为 1.0):

这是1.0版本。

现在正则表达式没有替换特殊字符。以下是我尝试过的代码:

 string input= "This is [test] version of application.";

 string stringtoFind = string.Format(@"\b{0}\b", "[test]");

 Console.WriteLine(Regex.Replace(input, stringtoFind, "1.0"));

input 和 stringtoFind 变量中可能有任何特殊字符。

标签: c#regexword-boundaryword-boundaries

解决方案


您必须在这里考虑两件事:

  • 特殊字符必须使用文字符号进行转义,当您将动态文字文本作为变量传递给正则表达式时\,最好使用方法完成Regex.Escape
  • 不可能依赖单词边界,\b因为这个结构的含义取决于直接的上下文。

您可以做的是使用Regex.Escape明确的单词边界(?<!\w)(?!\w)

string input= "This is [test] version of application.";
string key = "[test]";
string stringtoFind = $@"(?<!\w){Regex.Escape(key)}(?!\w)";
Console.WriteLine(Regex.Replace(input, stringtoFind, "1.0"));

请注意,如果要替换包含空格的键字符串,请使用

string stringtoFind = $@"(?<!\S){Regex.Escape(key)}(?!\S)";
                         ^^^^^^                    ^^^^^

推荐阅读