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

输入样例:



所需的输出(将“[test]”替换为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"));

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

最佳答案

您必须在这里说明两件事:

  • 当您将动态文字文本作为变量传递给正则表达式
  • 时,必须使用文字\符号对特殊字符进行转义,最好使用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)";
                             ^^^^^^                    ^^^^^
    

    10-04 18:50