有人知道匹配Domain.CCTLD的正则表达式吗?我不想要子域,只想要“原子域”。例如,docs.google.com没有得到匹配,但是google.com得到了匹配。但是,像.co.uk、CCTLDs这样的东西会使事情变得复杂。有人知道解决办法吗?提前谢谢。
编辑:--我意识到我还必须处理多个子域,比如john.doe.google.co.uk。现在比以往任何时候都更需要一个解决方案:P。
发布于 2010-07-08 21:41:39
基于您上面的评论,我将重新解释这个问题--而不是做一个匹配它们的正则表达式,我们将创建一个与它们相匹配的函数,并应用该函数来筛选一个域名列表,只包含第一类域,例如google.com、amazon.co.uk。
首先,我们需要一个TLD的列表。正如Greg提到的,公共后缀列表是一个很好的起点。让我们假设您已经将列表解析为一个名为suffixes的python数组。如果你对此并不满意,我可以添加一些代码来完成它。
suffixes = parse_suffix_list("suffix_list.txt")现在,我们需要识别给定域名是否与模式匹配的代码-name.后缀:
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发布于 2010-07-07 22:23:45
听起来,您正在寻找通过公共后缀列表项目可以获得的信息。
“公共后缀”是指互联网用户可以直接注册姓名的后缀。一些公共后缀的例子是".com“、".co.uk”和"pvt.k12.wy.us“。公共后缀列表是所有已知公共后缀的列表。
没有一个正则表达式可以合理地匹配公共后缀列表。您需要实现代码才能使用公共后缀列表,或者找到一个已经这样做的现有库。
发布于 2010-07-07 22:32:23
我可能会通过获得一个完整的TLD列表并使用它来创建regex来解决这个问题。例如(在Ruby中,对不起,还不是Pythonista ):
tld_alternation = ['\.com','\.co\.uk','\.eu','\.org',...].join('|')
regex = /^[a-z0-9]([a-z0-9\-]*[a-z0-9])?(#{tld_alternation})$/i我认为,如果不知道TLD的实际列表,就不可能正确区分TLD和子域(也就是说,如果您知道正则表达式是如何工作的,那么始终可以构造一个看起来像TLD的子域)。
https://stackoverflow.com/questions/3199343
复制相似问题