using System.Text.RegularExpressions;
private static string _requestXml;
public static void Main()
<Name>Sparky's Bank Account</Name>
<BankRoutingNumber>123456789</BankRoutingNumber>
<BankAccountNumber>987654321</BankAccountNumber>
Console.WriteLine(new string('-', 100));
Console.WriteLine(new string('-', 100));
Console.WriteLine(new string('-', 100));
Console.WriteLine(new string('-', 100));
private static void BasicFind()
var regex = new Regex(@"<BankAccountNumber>\d+<\/BankAccountNumber>", RegexOptions.Compiled);
foreach (Match match in regex.Matches(_requestXml))
Console.WriteLine(match.Value);
private static void BasicReplace()
var regex = new Regex(@"<BankAccountNumber>\d+<\/BankAccountNumber>", RegexOptions.Compiled);
string censored = regex.Replace(_requestXml, "<BankAccountNumber>*********</BankAccountNumber>");
Console.WriteLine(censored);
private static void Capturing()
var regex = new Regex(@"<BankAccountNumber>(\d+)<\/BankAccountNumber>", RegexOptions.Compiled);
foreach (Match match in regex.Matches(_requestXml))
for (int i = 0; i < match.Groups.Count; i++)
Console.WriteLine($"[{i}] {match.Groups[i]}");
private static void CaptureNaming()
var regex = new Regex(@"<BankAccountNumber>(?<acctNum>\d+)<\/BankAccountNumber>", RegexOptions.Compiled);
foreach (Match match in regex.Matches(_requestXml))
Console.WriteLine(match.Groups["acctNum"].Value);
private static void ReplaceWithFunction()
var regex = new Regex(@"<BankAccountNumber>(?<acctNum>\d+)<\/BankAccountNumber>", RegexOptions.Compiled);
string censored = regex.Replace(_requestXml, match =>
string accountNumber = match.Groups["acctNum"].Value;
int length = accountNumber.Length;
string masked = (length > 4)
? new string('*', length - 4) + accountNumber.Substring(length - 4)
: new string('*', length);
return $"<BankAccountNumber>{masked}</BankAccountNumber>";
Console.WriteLine(censored);