Могут быть некоторые примеры, когда это возвращает что-то отличное от желаемого, но коды стран являются единственными, которые состоят из 2 символов, и они могут иметь или не иметь обычно используемый короткий второй уровень (2 или 3 символа). Следовательно, в большинстве случаев это даст вам то, что вы хотите:
String GetRootDomain(String host)
{
String[] domains = host.Split('.');
if (domains.Length >= 3)
{
int c = domains.Length;
// handle international country code TLDs
// www.amazon.co.uk => amazon.co.uk
if (domains[c - 1].Length < 3 && domains[c - 2].Length <= 3)
return String.Join(".", domains, c - 3, 3);
else
return String.Join(".", domains, c - 2, 2);
}
else
return host;
}