Python - 正则表达式检查字符串是否为顶级域名

0 投票
2 回答
1510 浏览
提问于 2025-04-18 12:15

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

我需要检查:

  1. 这个字符串是否是一个正确的波兰域名(以.pl结尾)
  2. 这个域名是顶级域名(比如: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 只是给你一个仍然被视为一个整体的域名。

撰写回答