c# - 当单词以方括号等特殊字符开头或结尾时,单词边界不匹配
问题描述
我想用另一个数字替换作为方括号的字符串。我正在使用正则表达式替换方法。
样本输入:
这是[测试]版本。
所需输出(将“[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 变量中可能有任何特殊字符。
解决方案
您必须在这里考虑两件事:
- 特殊字符必须使用文字符号进行转义,当您将动态文字文本作为变量传递给正则表达式时
\
,最好使用方法完成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)";
^^^^^^ ^^^^^
推荐阅读
- c++ - mingw - 正确运行函数所需的 cdecl
- python - 如何将此 numpy 函数转换为 python 数学函数?
- firebase - 在 Flutter 中查询 Firebase Firestore 子集合
- google-cloud-platform - GCP 区域静态外部 IP 限制
- environment-variables - 使用 gatsby 云未定义 BRANCH 环境变量
- excel - 从访问表字段在 excel 中创建一个数组
- julia - Julia Flux:确定层的类型
- ms-access - 在 MS Access 中替换 CHAR(150)
- google-cloud-platform - 使用静态 IP 的 Google Cloud Function 拨出电话
- pine-script - 交易视图的 Pinscript