using System;
using System.Text.RegularExpressions;
public class Program
{
private static string _requestXml;
public static void Main()
_requestXml =
@"
<Name>Sparky's Bank Account</Name>
<BankRoutingNumber>123456789</BankRoutingNumber>
<BankAccountNumber>987654321</BankAccountNumber>
";
BasicFind();
Console.WriteLine(new string('-', 100));
BasicReplace();
Capturing();
CaptureNaming();
ReplaceWithFunction();
}
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()
string censored = regex.Replace(_requestXml, "<BankAccountNumber>*********</BankAccountNumber>");
Console.WriteLine(censored);
private static void Capturing()
var regex = new Regex(@"<BankAccountNumber>(\d+)<\/BankAccountNumber>", RegexOptions.Compiled);
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);
Console.WriteLine(match.Groups["acctNum"].Value);
private static void ReplaceWithFunction()
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>";
});