using System.Text.RegularExpressions;
public static void Main()
var masked = GetMaskedIban("DE12500123456789012345");
masked = GetMaskedIban("BE71096123456769");
string input = "DE12500123456789012345";
string pattern = @"^([A-Z]{2})(?:.{5})(\d{5})(.*)(\d{3})$";
var match = Regex.Matches(input, pattern)[0];
masked = $"{match.Groups[1].Value}*****{match.Groups[2].Value}{"".PadRight(match.Groups[3].Value.Length, '*')}{match.Groups[4].Value}";
var groupPattern = @"^([A-Z]{2})(?<Ast>\d{5})(\d{5})(?<Ast>.*)(\d{3})$";
var groupRegex = new Regex(groupPattern);
var x = groupRegex.ReplaceGroup(input,"Ast", '*');
public static string GetMaskedIban(string iban) => $"{iban[0..2]}{"".PadRight(5, '*')}{iban[7..12]}{"".PadRight(iban.Length - 15, '*')}{iban[^3..]}";
public static string ReplaceGroup(this Regex regex, string input, string groupName, char replacement)
return regex.Replace(input, m =>
var group = m.Groups[groupName];
var sb = new StringBuilder();
var previousCaptureEnd = 0;
foreach (var capture in group.Captures.Cast<Capture>())
var currentCaptureEnd = capture.Index + capture.Length - m.Index;
var currentCaptureLength = capture.Index - m.Index - previousCaptureEnd;
sb.Append(m.Value.Substring(previousCaptureEnd, currentCaptureLength));
sb.Append("".PadRight(currentCaptureLength,replacement));
previousCaptureEnd = currentCaptureEnd;
sb.Append(m.Value.Substring(previousCaptureEnd));