正则表达式匹配Domain.CCTLD

Tom*_*Tom 8 python regex subdomain dns tld

有没有人知道正则表达式匹配Domain.CCTLD?我不想要子域名,只需要"原子域名".例如,docs.google.com不匹配,但google.com确实如此.然而,像.co.ukCCTLD 这样的东西变得复杂.有谁知道解决方案?提前致谢.

编辑:我意识到我还必须处理多个子域,比如john.doe.google.co.uk.现在比以往任何时候都需要解决方案:P.

Gre*_*ill 8

听起来您正在寻找通过Public Suffix List项目提供的信息.

"公共后缀"是指互联网用户可以直接注册名称的公共后缀.公共后缀的一些示例是".com",".co.uk"和"pvt.k12.wy.us".公共后缀列表是所有已知公共后缀的列表.

没有单一的正则表达式可以合理地匹配公共后缀列表.您需要实现代码以使用公共后缀列表,或者找到已经执行此操作的现有库.


Ben*_*son 3

根据您上面的评论,我将重新解释这个问题 - 我们将创建一个与它们匹配的函数,并应用该函数来过滤域名列表,而不是创建一个与它们匹配的正则表达式包括一级域名,例如 google.com、amazon.co.uk。

首先,我们需要一份 TLD 列表。正如 Greg 提到的,公共后缀列表是一个很好的起点。假设您已将列表解析为名为 的 python 数组suffixes。如果这不是您喜欢的,请发表评论,我可以添加一些代码来完成它。

suffixes = parse_suffix_list("suffix_list.txt")
Run Code Online (Sandbox Code Playgroud)

现在我们需要代码来识别给定的域名是否与模式 some-name.suffix 匹配:

def is_domain(d):
    for suffix in suffixes:
        if d.endswith(suffix):
            # Get the base domain name without suffix
            base_name = d[0:-(suffix.length + 1)]
            # If it contains '.', it's a subdomain. 
            if not base_name.contains('.'):
                return true
    # If we get here, no matches were found
    return false
Run Code Online (Sandbox Code Playgroud)

  • 您现在可以使用一个简单但优秀的 python 包来完成繁重的工作:http://pypi.python.org/pypi/publicsuffix (4认同)