CSharp · Console
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();
Console.WriteLine(new string('-', 100));
Capturing();
Console.WriteLine(new string('-', 100));
CaptureNaming();
Console.WriteLine(new string('-', 100));
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()
{
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);
}
}