5

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

样本输入:

这是[测试]版本。

所需输出(将“[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 变量中可能有任何特殊字符。

4

5 回答 5

3

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

  • 特殊字符必须使用文字符号进行转义,当您将动态文字文本作为变量传递给正则表达式时\,最好使用方法完成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)";
                         ^^^^^^                    ^^^^^
于 2019-07-10T07:06:59.383 回答
1

我的猜测是这个简单的表达式可能会起作用:

\[[^]]+\]

测试

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"\[[^]]+\]";
        string substitution = @"1.0";
        string input = @"This is [test] version";
        RegexOptions options = RegexOptions.Multiline;

        Regex regex = new Regex(pattern, options);
        string result = regex.Replace(input, substitution);
    }
}

该表达式在此演示的右上角面板中进行了说明,如果您希望探索/简化/修改它,并且在此链接中,您可以逐步观看它如何与一些示例输入匹配,如果您愿意的话。

于 2019-07-10T06:39:18.073 回答
1

在我看来,这似乎最接近您的要求:

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

string stringtoFind = Regex.Escape("[test]");

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

那输出This is 1.0 version of application.

但是,在这种情况下,只需这样做就足够了:

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

Console.WriteLine(input.Replace("[test]", "1.0"));

它做同样的事情。

于 2019-07-10T06:44:56.313 回答
0
\] // Matches the ]
\[ // Matches the [

这是您将来可以使用的备忘单https://www.rexegg.com/regex-quickstart.html#morechars

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

string stringtoFind = string.Format(@"\[[^]]+\]", "[test]");

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

Console.ReadKey();

https://www.regexplanet.com/share/index.html?share=yyyyujzkvyr => 演示

于 2019-07-10T07:09:24.417 回答
-1

您应该转义括号并删除\b

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

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

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

输出

This is 1.0 version of application.

重要的提示

\b匹配空格。\b匹配单词开头或结尾的空字符串。也许您正在寻找\s.

于 2019-07-10T06:37:12.933 回答