如何提取域(TLD 和二级域)但忽略子域?

How can I extract a domain (TLD and second level domains) but ignore subdomains?

我是 运行 outlook 上的一个 VBA 宏,可以从电子邮件中提取域。我所拥有的效果很好,但只提取“@”符号后的所有内容,因此子域包含在 link 中,使我的排序失败。但并非每个地址都有子域,因此我必须足够灵活地同时容纳这两个地址。

以下是我从示例电子邮件地址获得的结果:

我希望两个电子邮件地址都发送到 return xyz.com

我使用的字符串是:

sDomain = Right(oMail.SenderEmailAddress, Len(oMail.SenderEmailAddress) - InStr(1, oMail.SenderEmailAddress, "@"))

也许有一种方法可以使用最后一个点提取 TLD,然后将其与该点前面的二级域连接起来,但由于二级域可能有一个和号或一个点,我可以' 想出一个可以兼顾两者的公式。

感谢您的帮助!

尝试这样的事情(但请注意 Dmitry 的回答...)

Sub DomainTester()
    Dim a
    For Each a In Array("xyz.com", "A@xyz.com", "A@subdomain.xyz.com", "A@xyz")
        Debug.Print a, Domain(a)
    Next a
End Sub

Function Domain(addr) As String
    Dim arr
    If InStr(addr, "@") > 0 Then
        arr = Split(Split(addr, "@")(1), ".")
        If UBound(arr) > 0 Then Domain = arr(UBound(arr) - 1) & "." & arr(UBound(arr))
    End If
End Function

您可以使用 Split() 函数将域名拆分成多个部分,但您需要更多额外的逻辑才能使其足够通用:一些 TLD 有 3 个部分,而不是 2 个 - 例如"user@domain.co.uk" 你想要 "domain.co.uk",而不是 "co.uk"