using System;
using System.Text;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var s = "Hi is this available 18dec to 21st dec 2nd dec 1st jan dec12th";
var res = Regex.Replace(s, @"(\p{L})?(\d+)(st|[nr]d|th|(\p{L}+))", repl);
Console.WriteLine(res);
}
public static string repl(Match m)
{
var res = new StringBuilder();
res.Append(m.Groups[1].Value);
if (m.Groups[1].Success)
res.Append(" ");
res.Append(m.Groups[2].Value);
if (m.Groups[4].Success)
res.Append(" ");
res.Append(m.Groups[3]);
return res.ToString();
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dDsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5JTzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9uczsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgcyA9ICJIaSBpcyB0aGlzIGF2YWlsYWJsZSAxOGRlYyB0byAyMXN0IGRlYyAybmQgZGVjIDFzdCBqYW4gZGVjMTJ0aCI7CgkJdmFyIHJlcyA9IFJlZ2V4LlJlcGxhY2UocywgQCIoXHB7TH0pPyhcZCspKHN0fFtucl1kfHRofChccHtMfSspKSIsIHJlcGwpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKHJlcyk7Cgl9CglwdWJsaWMgc3RhdGljIHN0cmluZyByZXBsKE1hdGNoIG0pIAoJewoJCXZhciByZXMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwoJCXJlcy5BcHBlbmQobS5Hcm91cHNbMV0uVmFsdWUpOwoJCWlmIChtLkdyb3Vwc1sxXS5TdWNjZXNzKQoJCQlyZXMuQXBwZW5kKCIgIik7IAoJCXJlcy5BcHBlbmQobS5Hcm91cHNbMl0uVmFsdWUpOwoJCWlmIChtLkdyb3Vwc1s0XS5TdWNjZXNzKQoJCQlyZXMuQXBwZW5kKCIgIik7CgkJcmVzLkFwcGVuZChtLkdyb3Vwc1szXSk7CgkJcmV0dXJuIHJlcy5Ub1N0cmluZygpOwoJfQp9