Если вы хотите «замаскировать» некоторый параметр с фиксированным количеством звездочек, вы можете использовать простой Regex.Replace
без MatchEvaluator:
string RemoveSensitiveData(string value) =>
Regex.Replace(value, "((?:&|^)(?:Name|OtherSensitiveData)=)[^&]+", "$1*****")
Если вы планируете заменить на такое же количество звездочекuse
string RemoveSensitiveData(string value) =>
Regex.Replace(value, "((?:&|^)(?:Name|OtherSensitiveData)=)([^&]+)", m =>
$"{m.Groups[1].Value}{new String('*', m.Groups[2].Value.Length)}")
Regex details
((?:&|^)(?:Name|OtherSensitiveData)=)
- Группа 1: (?:&|^)
- сопоставление группы без захваталибо &
символ или начало строки (его можно заменить на (?<![^&])
) (?:Name|OtherSensitiveData)
- группа без захвата, соответствующая либо Name
, либо OtherSensitiveData
подстрокам =
- знак равенства
([^&]+)
- Группа 2: любые 1+ символов, кроме &
.
См. C # демо:
var value = "Id=12345&Id=&Name=TestName&AddressLine1=1232+test+&AddressLine2=sdf&City=abcd";
Console.WriteLine(Regex.Replace(value, "((?:&|^)(?:Name|OtherSensitiveData)=)[^&]+", "$1*****"));
// => Id=12345&Id=&Name=*****&AddressLine1=1232+test+&AddressLine2=sdf&City=abcd
Console.WriteLine(Regex.Replace(value, "((?:&|^)(?:Name|OtherSensitiveData)=)([^&]+)", m =>
$"{m.Groups[1].Value}{new String('*', m.Groups[2].Value.Length)}"));
// => Id=12345&Id=&Name=********&AddressLine1=1232+test+&AddressLine2=sdf&City=abcd