正则表达式.替换-跳过作为较长字符串一部分的字符串

本文关键字:字符串 一部分 替换 正则表达式 | 更新日期: 2023-09-27 17:49:41

我需要替换文本文件中的数字字符串列表。然而,如果字符串是另一个数字字符串的一部分,它不应该被替换:需要替换的字符串:111111替换字符串:mask

Text file:
111111
 111111.text text
text text111111 text text
a111111
2111111
111111a
1111112
a111111a
Expected result:
MASKED
 MASKED.text text
text textMASKED text text
aMASKED
2111111 -> Character 2 prevents masking
MASKEDa
1111112 -> Character 2 prevents masking
aMASKEDa

这是我的代码:

inputText = Regex.Replace(inputText, "(?<![0-9])" + stringToMask + "(?<![0-9])", "####MASKED####");

这段代码跳过所有内容,不执行任何屏蔽。

正则表达式.替换-跳过作为较长字符串一部分的字符串

您可以使用MatchEvaluator http://www.dotnetperls.com/regex-replace执行replace by condition。要决定是否进行preform替换,您可以添加第一个和最后一个字母来匹配模式,按此模式拆分字符串并分析第一个和最后一个符号。

如果我正确理解你的问题,下面的正则表达式应该工作:

(?<!'d)111111(?!'d)

同时使用负向后看断言和负向前看断言。

下面是一个工作示例。

输出:

MASKED
 MASKED.text text
text textMASKED text text
aMASKED
2111111
MASKEDa
1111112
aMASKEDa