Python - 正则表达式检查字符串是否为顶级域名
我有一个表单字段,用来接受表示波兰域名的字符串(以.pl结尾)。
我需要检查:
- 这个字符串是否是一个正确的波兰域名(以.pl结尾)
- 这个域名是顶级域名(比如:domainname.pl)还是二级域名:domainname.net.pl、domainname.something.pl
你有没有什么建议,告诉我这样的正则表达式应该怎么写?
2 个回答
0
如果你真的需要一个正则表达式来解决这个问题,我建议你可以试试下面这个:
^([a-z0-9-]+.)?([a-z0-9-]+).pl$
4
你不能用正则表达式匹配所有可能的顶级域名(TLD),而且什么是顶级域名的列表也会不时变化。
建议使用一些库来提取顶级域名,比如 tldextract
或者 publicsuffix
。
示例:
>>> 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
只是给你一个仍然被视为一个整体的域名。