我试图在不导入第三方模块的情况下利用巨型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是一个列表对象是不方便的,因为它使迭代过程比期望的更深,但不确定如何解决这个问题。
答案 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/