using System.Text.RegularExpressions;
using System.Collections.Generic;
public static void Main()
if (valFinal.StartsWith("%"))
valFinal = valFinal[1..];
if (valFinal.EndsWith("%"))
valFinal = valFinal[..^1];
(string value, string mask) obj;
obj = ("A1B2C3D4", "XXXX-XXXX");
var x = rg.Replace(s, "");
private static readonly Regex _rgxMask = new(@"([\D]+)");
public static string Format(string value, string mask)
var number = long.Parse(value);
mask = mask.Replace("#", "0");
var masksArr = new List<string>();
if (mask.StartsWith("["))
mask = mask.Replace("[", "").Replace("]", "").Replace("\"", "");
masksArr = mask.Split(",").Select(m => m.Trim()).ToList();
masksArr.Add(mask.Trim());
var masks = masksArr.Select(x => new { mask = _rgxMask.Replace(x, "\\$1"), noFormat = _rgxMask.Replace(x, "") });
var maskFound = masks.FirstOrDefault(x => x.noFormat.Length == value.ToString().Length);
mask = masks.First().mask;
return number.ToString(mask);
var format = new List<char>();
var rgx = new Regex(exp);
for (var i = 0; i < groups; i++)
replace += "$" + (i + 1);
for (var i = groups; i < format.Count; i++)
return rgx.Replace(value, replace);