fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text.RegularExpressions;
  6.  
  7. public class Test
  8. {
  9. public static string CreateWb(string term)
  10. {
  11. if (char.IsLetterOrDigit(term[term.Length-1]) || term[term.Length-1] == '_')
  12. {
  13. return $@"\b{Regex.Escape(term)}\b";
  14. }
  15. else
  16. {
  17. return $@"\b{Regex.Escape(term)}";
  18. }
  19. }
  20.  
  21. public static void Main()
  22. {
  23. var dct = new Dictionary<string, string>();
  24. dct.Add("R", "RUA");
  25. dct.Add("R.", "RUA");
  26. dct.Add("AV:", "AVENIDA");
  27. var pat = $@"({string.Join("|", dct.Keys.Select(k => CreateWb(k)).OrderByDescending(x => x.Length))})\W*(\w)?";
  28. var input ="Jardim test R. paraná R. paraná R xavier AV:test AV:VEREADOR HOMERO FRANCO";
  29. var output = Regex.Replace(input, pat, m =>
  30. $"{dct[m.Groups[1].Value]}" + (m.Groups[2].Success ? $" {m.Groups[2].Value}" : ""),
  31. RegexOptions.IgnoreCase);
  32. Console.WriteLine(output);
  33. var expected = "Jardim test RUA paraná RUA paraná RUA xavier AVENIDA test AVENIDA VEREADOR HOMERO FRANCO";
  34. Console.WriteLine(expected);
  35. Console.WriteLine(expected==output);
  36. }
  37. }
Success #stdin #stdout 0.09s 31268KB
stdin
Standard input is empty
stdout
Jardim test RUA paraná RUA paraná RUA xavier AVENIDA test AVENIDA VEREADOR HOMERO FRANCO
Jardim test RUA paraná RUA paraná RUA xavier AVENIDA test AVENIDA VEREADOR HOMERO FRANCO
True