掩盖字符串中的数字

fub*_*ubo 1 c# regex

我想更改包含数字的文本.数字的第一个和最后一个字符需要保留,其他字符应替换为a *.与文本混合的数字应保持不变.

我有这个代码:

string result = Regex.Replace(input, @"(?<=[\d]{1})[\d]*(?=[\d]{1})", 
                              m => new string('*', m.Length));
Run Code Online (Sandbox Code Playgroud)

用这个输入:

"Lorem 1 ip234sum 22 dolor 3234445 sit amet, adipiscing 1234"
Run Code Online (Sandbox Code Playgroud)

应该显示这个结果:

"Lorem 1 ip234sum 22 dolor 3*****5 sit amet, adipiscing 1**4"
Run Code Online (Sandbox Code Playgroud)

但是,目前的输出是:

"Lorem 1 ip2*4sum 22 dolor 3*****5 sit amet, adipiscing 1**4"
Run Code Online (Sandbox Code Playgroud)

如你所见,它也不正确地运作ip234sum.如何让它忽略不完全数字的字符串部分?

das*_*ght 5

添加\b锚点到您的环顾四周将解决问题:

string result = Regex.Replace(input, @"(?<=\b[\d]{1})[\d]*(?=[\d]{1}\b)", m => new string('*', m.Length));
//                                         ^^                       ^^
Run Code Online (Sandbox Code Playgroud)

演示.

  • `(?<=\b\d)\ d +(?=\d\b)`正则表达式更清晰. (4认同)