使用正则表达式从FQDN隔离TLD

时间:2016-05-04 21:25:20

标签: python regex

我试图在不导入第三方模块的情况下利用巨型FQDN列表中的正则表达式来隔离TLD,并试图确定是否有更有说服力的方法。我的方式有效,但对我的喜好有点麻烦。

示例代码:

domains = ['x.sample1.com', 'y.sample2.org', 'z.sample3.biz']
temp = []
for domain in domains:
    temp.append(re.findall('\.[a-z0-9]+', domain, re.I)
tlds = []
for item in temp:
    for tld in item:
        tlds.append(tld)

返回re.findall是一个列表对象是不方便的,因为它使迭代过程比期望的更深,但不确定如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

"快速修复"要么采取每个数组中的最后一项:

split('.', domain)[-1]

或者,如果你真的不关心第一场比赛,那么根本不要捕捉它们:

re.find('\.[a-z0-9]+$', domain, re.I)

(注意使用$来匹配字符串的结尾。)

但是,请注意,使用正则表达式无法正确解决此问题。例如,您如何知道google.co.uk的顶级域名是co.uk,而不只是uk

遗憾的是,这个问题的唯一完整解决方案是使用一个实现public suffix list的库 - 这基本上只是一个很长(手动更新)的所有TLD列表。例如,在python中:https://pypi.python.org/pypi/publicsuffix/