用特殊字符替换字符串

时间:2019-07-10 06:25:16

标签: c# regex

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

样本输入:

  

这是[测试]版本。

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

5 个答案:

答案 0 :(得分:3)

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

  • 当您将动态文字文本作为变量传递给regex时,必须使用文字\来转义特殊字符,最好使用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)";
                         ^^^^^^                    ^^^^^

答案 1 :(得分:3)

\] // 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 =>演示

答案 2 :(得分:2)

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

\[[^]]+\]

测试

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

this demo的右上角对表达式进行了说明,如果您想探索/简化/修改它,在this link中,您可以观察它如何与某些示例输入步骤匹配一步一步,如果您喜欢。

答案 3 :(得分:2)

在我看来,这与您所要求的最接近:

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

它做同样的事情。

答案 4 :(得分:-1)

您应该放宽括号,并移除1. { "requestDetails": { "basicDetails": { "firstName": "Something", "lastName": "Something", "emailAddress": "Something", }, "addressDetails": { "addLine1": "Something", "addLine2": "Something", "city": "Something", "state": "Something", "country": "Something", } }, "openDate": "2019-07-05T09:59:18.601Z", } 2. { "reqId": "0b5c7dd3931944b28f693ef8bf6fa2ad", "requestDetails": { "basicDetails": { "firstName": "Something", "lastName": "Something", "emailAddress": "Something", }, "addressDetails": { "addLine1": "Something", "addLine2": "Something", "city": "Something", "state": "Something", "country": "Something", } }, "openDate": "2019-07-05T09:59:18.601Z", }

\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