using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static string CreateWb(string term)
{
if (char.IsLetterOrDigit(term[term.Length-1]) || term[term.Length-1] == '_')
{
return $@"\b{Regex.Escape(term)}\b";
}
else
{
return $@"\b{Regex.Escape(term)}";
}
}
public static void Main()
{
var dct = new Dictionary<string, string>();
dct.Add("R", "RUA");
dct.Add("R.", "RUA");
dct.Add("AV:", "AVENIDA");
var pat = $@"({string.Join("|", dct.Keys.Select(k => CreateWb(k)).OrderByDescending(x => x.Length))})\W*(\w)?";
var input ="Jardim test R. paraná R. paraná R xavier AV:test AV:VEREADOR HOMERO FRANCO";
var output = Regex.Replace(input, pat, m =>
$"{dct[m.Groups[1].Value]}" + (m.Groups[2].Success ? $" {m.Groups[2].Value}" : ""),
RegexOptions.IgnoreCase);
Console.WriteLine(output);
var expected = "Jardim test RUA paraná RUA paraná RUA xavier AVENIDA test AVENIDA VEREADOR HOMERO FRANCO";
Console.WriteLine(expected);
Console.WriteLine(expected==output);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLklPOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyBzdHJpbmcgQ3JlYXRlV2Ioc3RyaW5nIHRlcm0pCgl7CgkJaWYgKGNoYXIuSXNMZXR0ZXJPckRpZ2l0KHRlcm1bdGVybS5MZW5ndGgtMV0pIHx8IHRlcm1bdGVybS5MZW5ndGgtMV0gPT0gJ18nKQoJCXsKCQkJcmV0dXJuICRAIlxie1JlZ2V4LkVzY2FwZSh0ZXJtKX1cYiI7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiAkQCJcYntSZWdleC5Fc2NhcGUodGVybSl9IjsKCQl9Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgZGN0ID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBzdHJpbmc+KCk7CgkJZGN0LkFkZCgiUiIsICJSVUEiKTsKCQlkY3QuQWRkKCJSLiIsICJSVUEiKTsKCQlkY3QuQWRkKCJBVjoiLCAiQVZFTklEQSIpOwoJCXZhciBwYXQgPSAkQCIoe3N0cmluZy5Kb2luKCJ8IiwgZGN0LktleXMuU2VsZWN0KGsgPT4gQ3JlYXRlV2IoaykpLk9yZGVyQnlEZXNjZW5kaW5nKHggPT4geC5MZW5ndGgpKX0pXFcqKFx3KT8iOwoJCXZhciBpbnB1dCA9IkphcmRpbSB0ZXN0IFIuIHBhcmFuw6EgUi4gcGFyYW7DoSBSIHhhdmllciBBVjp0ZXN0IEFWOlZFUkVBRE9SIEhPTUVSTyBGUkFOQ08iOwoJCXZhciBvdXRwdXQgPSBSZWdleC5SZXBsYWNlKGlucHV0LCBwYXQsIG0gPT4gCgkJCSQie2RjdFttLkdyb3Vwc1sxXS5WYWx1ZV19IiArIChtLkdyb3Vwc1syXS5TdWNjZXNzID8gJCIge20uR3JvdXBzWzJdLlZhbHVlfSIgOiAiIiksIAoJCQlSZWdleE9wdGlvbnMuSWdub3JlQ2FzZSk7IAoJCUNvbnNvbGUuV3JpdGVMaW5lKG91dHB1dCk7CgkJdmFyIGV4cGVjdGVkID0gIkphcmRpbSB0ZXN0IFJVQSBwYXJhbsOhIFJVQSBwYXJhbsOhIFJVQSB4YXZpZXIgQVZFTklEQSB0ZXN0IEFWRU5JREEgVkVSRUFET1IgSE9NRVJPIEZSQU5DTyI7CgkJQ29uc29sZS5Xcml0ZUxpbmUoZXhwZWN0ZWQpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKGV4cGVjdGVkPT1vdXRwdXQpOwoJfQp9