Regex.Replace - 跳过作为较长字符串一部分的字符串

时间:2011-04-12 10:07:10

标签: c# regex replace

我需要替换文本文件中的数字字符串列表。但是,如果字符串是另一个数字字符串的一部分,则不应替换它: 要替换的字符串:111111 替换字符串:MASKED

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

此代码只是跳过所有内容并且不执行任何屏蔽。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果我正确理解您的问题,以下正则表达式应该有效:

(?<!\d)111111(?!\d)

它同时使用negative lookbehind assertion and a negative lookahead assertion

这是a working example

输出:

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