解決したい問題
あるhostnameから3つの部分を抽出したい:Domain, SubDomain, Top Level Domain
(Domainの構成について、GoDaddyのYoutubeの説明がおすすめです)
例えば、下記のhostnameなら、
www.facebook.com
Subdomain:(www) 特に意味ないから略にする
Domain:facebook
Top Level Domain:com
でも、日本でよくある co.jp みたいなやつ、(正確にいうと違うけど)ここではセットのTLDで考えたい。
例えば、news.yahoo.co.jp なら、
Subdomain:news
Domain:yahoo
Top Level Domain:co.jp
という結果がほしいです。
ちなみに、日本以外も、こういうco.xx式を使ってる国もいます。
Some of the countries using .co as a second-level domain include India (.in), Indonesia (.id), Israel (.il), the United Kingdom (.uk), South Africa (.za), Costa Rica (.cr), New Zealand (.nz), Japan (.jp), South Korea (.kr) and Cook Islands (.ck).
ref: wikipedia
Python3のコード
import re
p_tld = re.compile(r"\.(?P<tld>(?:\w{2}\.)?\w{2,5})$")
test =[
"amazon.co.jp",
"amazon.com",
"news.yahoo.co.jp",
"news.yahoo.jp",
"news.yahoo.com",
"google.jp",
"google.co.jp",
"google.com",
"www.microsoft.com"
]
for t in test:
print(t)
# wwwをなくす
t = re.sub(r"^www\.", "", t)
# TLDの部分を探す
m = p_tld.search(t)
if(m != None):
print("tld:", m.group("tld"))
# TLDの部分をカット
t = p_tld.sub("",t)
# 残る部分。もしsubdomainあれば、print。なければ、domainだけprint
subdomain = t.split('.')
if(len(subdomain) > 1):
print("subdomain:", subdomain[0])
print("domain:", subdomain[1])
else:
print("domain:", subdomain[0])
print("--------")
テスト結果
amazon.co.jp
tld: co.jp
domain: amazon
--------
amazon.com
tld: com
domain: amazon
--------
news.yahoo.co.jp
tld: co.jp
subdomain: news
domain: yahoo
--------
news.yahoo.jp
tld: jp
subdomain: news
domain: yahoo
--------
news.yahoo.com
tld: com
subdomain: news
domain: yahoo
--------
google.jp
tld: jp
domain: google
--------
google.co.jp
tld: co.jp
domain: google
--------
google.com
tld: com
domain: google
--------
www.microsoft.com
tld: com
domain: microsoft
--------