当前位置: 首页 > 知识库问答 >
问题:

当单词以特殊字符(如方括号)开始或结束时,单词边界不匹配

段渊
2023-03-14

我想用另一个数字替换字符串,它是一个方括号。我正在使用regex替换方法。

示例输入:

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

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

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

共有1个答案

鲜于凯歌
2023-03-14

这里必须说明两件事:

  • 特殊字符必须用文本\符号转义,如果将动态文本作为变量传递给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)";
                         ^^^^^^                    ^^^^^
 类似资料:
  • 问题内容: 说我想匹配短语中短语的存在。 使用python我可以做到这一点: 这行得通,但我想避免使用搜索模式对短语给出肯定的结果。 所以我使用这种模式,像这样: 现在,我没有比赛。 如果搜索模式不包含任何字符,则可以使用。例如: 另外,如果我删除final ,那么它也可以工作: 此外,文档中还提到了 请注意,形式上,\ b定义为\ w和\ W字符之间的边界(反之亦然)或\ w与字符串的开头/结尾

  • 使用正则表达式匹配表达式 为什么这两个示例匹配如下(突出显示): c# < code>a #b #c #d 具体来说,为什么第一个字符串不匹配包含最后一个#之前的所有内容? 由于单词边界(\b)是零宽度匹配,可以在单词字符(\w)和非单词字符(\ w)之间匹配,或者在单词字符和字符串的开始或结束之间匹配,我不确定以非单词字符结束表达式会如何影响匹配。

  • 基于正则表达式直到但不包括,我试图匹配所有字符,直到一个单词边界。 例如,在以下字符串中匹配: 我正在使用: 一个否定集 有字边界 和一个加号中继器 这样地: 它应该查找一个“a”,然后为任何非单词边界的字符获取一个或多个匹配项。所以我希望它在

  • 我需要一个正则表达式,它匹配以单词边界结尾的表达式,但不将连字符视为边界。即获取所有匹配的表达式 但是不匹配,例如。 换句话说:我想要一个等效的词边界运算符\b,它不是使用单词字符类,而是使用扩展类:

  • 问题内容: 我正在尝试将某些全字词表达式与MySQL REGEXP函数进行匹配。当涉及到双引号时,就会出现问题。 MySQL文档说:“要在正则表达式中使用特殊字符的文字实例,请在其前面加上两个反斜杠()字符。” 但是这些查询都返回0: 我还能尝试得到1?还是这不可能? 问题答案: 首先让我引用文档: [[:<:]],[[:>:]] 这些标记代表单词边界。它们分别匹配单词的开头和结尾。单词是单词字符

  • 问题内容: 我可以通过以下方式替换美元符号 :通过添加边界字符来替换单词: 但是我似乎无法将它们结合起来用美元符号代替单词。 这是一个例子。我正在尝试将“ ”(不)替换为“ ”。 产出 如何获得它来代替$ temp4和仅$ temp4? 问题答案: 使用明确的单词边界,和,而不是上下文相关的: 请参阅 regex演示 。 如果在当前位置的左侧紧邻有一个非单词char ,则是一个向后的否定后向匹配;