Я хочу изменить текст, содержащий числа. Первый и последний символы чисел должны оставаться, остальные должны быть заменены на *
. Номера, смешанные с текстом, должны оставаться неизменными.Маскировка чисел в строке
У меня есть этот код:
string result = Regex.Replace(input, @"(?<=[\d]{1})[\d]*(?=[\d]{1})",
m => new string('*', m.Length));
Что с этим входом:
"Lorem 1 ip234sum 22 dolor 3234445 sit amet, adipiscing 1234"
Если показать этот результат:
"Lorem 1 ip234sum 22 dolor 3*****5 sit amet, adipiscing 1**4"
Однако, токовый выход:
"Lorem 1 ip2*4sum 22 dolor 3*****5 sit amet, adipiscing 1**4"
Как вы видите, это неправильно и работает на ip234sum
. Как я могу заставить его игнорировать части строки, которые не являются полностью числовыми?
Параметр '\ d + (? = \ D \ б)' regex намного чище. –
@stribizhev Это абсолютно верно. Тем не менее, я хотел сохранить неизменное выражение OP, потому что он был настолько близок к правильному решению. У него могут быть причины оставить '{1}': возможно, ему нужна была возможность изменить количество «видимых» символов - скажем, по две с каждой стороны. – dasblinkenlight