Python
正規表現
URL
regexp
python3

co.jp のある hostname を正規表現で分解する

More than 1 year has passed since last update.

解決したい問題

ある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
--------