当单词以方括号括起来的特殊字符开头或结尾时,单词边界不匹配

问题描述 投票:5回答: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"));

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

c# regex word-boundary word-boundaries
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)";
                         ^^^^^^                    ^^^^^

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

它做同样的事情。


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中,您可以逐步观察它如何与某些样本输入匹配。喜欢。


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 =>演示


-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匹配NOT匹配空格。 \b匹配单词开头或结尾的空字符串。也许您在寻找\s

© www.soinside.com 2019 - 2024. All rights reserved.