我想更改包含数字的文本.数字的第一个和最后一个字符需要保留,其他字符应替换为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.如何让它忽略不完全数字的字符串部分?
添加\b锚点到您的环顾四周将解决问题:
string result = Regex.Replace(input, @"(?<=\b[\d]{1})[\d]*(?=[\d]{1}\b)", m => new string('*', m.Length));
// ^^ ^^
Run Code Online (Sandbox Code Playgroud)