Python - 正则表达式,用于检查字符串是否为TLD域

时间:2014-07-06 09:16:59

标签: python regex

我有表单字段,接受表示波兰域名的字符串(以.pl结尾)

我需要检查:

  1. 如果字符串是正确的波兰域名(以.pl结尾)
  2. 域名是顶级域名(即:domainname.pl)或第二层次:domainname.net.pl,domainname.something.pl
  3. 你有什么建议这样的正则表达式应该是什么样的吗?

2 个答案:

答案 0 :(得分:5)

您无法将所有可能的顶级域名与正则表达式匹配,并且 TLD的列表会不时更改。

使用库来提取TLD,例如tldextractpublicsuffix

演示:

>>> import tldextract
>>> tldextract.extract('domainname.net.pl')
ExtractResult(subdomain='', domain='domainname', suffix='net.pl')
>>> tldextract.extract('www.domainname.net.pl')
ExtractResult(subdomain='www', domain='domainname', suffix='net.pl')
>>> from publicsuffix import PublicSuffixList
>>> psl = PublicSuffixList()
>>> psl.get_public_suffix('domainname.net.pl')
'domainname.net.pl'
>>> psl.get_public_suffix('www.domainname.net.pl')
'domainname.net.pl'

tldextract为您提供解析结果,而publicsuffix仅为您提供仍被视为一个实体的域名。

答案 1 :(得分:0)

如果你真的需要一个正则表达式,我会选择这样的东西:

^([a-z0-9-]+.)?([a-z0-9-]+).pl$