Давайте реализуем шаг за шагом, начиная с маскировки одного имени:
, если есть 3-4 буквы, то последние две буквы будут замаскированы. Если есть еще 4 буквы, первые 2 буквы и последняя 1 буква не будут маскироваться
private static string MyMask(string value) {
if (string.IsNullOrEmpty(value) || value.Length < 3)
return value;
else if (value.Length <= 4)
return value.Substring(0, 2) +
new string('*', value.Length - 2);
else
return value.Substring(0, 2) +
new string('*', value.Length - 3) +
value.Substring(value.Length - 1);
}
Имея маску, мы можем написать простое регулярное выражение: все, что мы хотим, это Replace
слов с 3
буквами или более в соответствующие MyMask
string source = "Jo Dyne Roger";
string result = Regex.Replace(source, @"\b\w{3,}\b", match => MyMask(match.Value));
Демо:
string[] tests = new string[] {
"Jo Dyne Roger",
"Samantha Summer",
};
string report = string.Join(Environment.NewLine, tests
.Select(test => $"{test} --> {Regex.Replace(test, @"\b\w{3,}\b", match => MyMask(match.Value))}")
);
Console.Write(report);
Результат:
Jo Dyne Roger --> Jo Dy** Ro**r
Samantha Summer --> Sa*****a Su***r