2016-05-04 88 views
1

私はサードパーティのモジュールをインポートせずにFQDNの巨大なリストから正規表現を利用してTLDを分離しようとしています。私のやり方はうまくいくが、私の好きなところはちょっと面倒だ。正規表現を使用してFQDNからTLDを分離します

サンプルコード:

domains = ['x.sample1.com', 'y.sample2.org', 'z.sample3.biz'] 
temp = [] 
for domain in domains: 
    temp.append(re.findall('\.[a-z0-9]+', domain, re.I) 
tlds = [] 
for item in temp: 
    for tld in item: 
     tlds.append(tld) 

それは希望よりも、反復プロセスは、全体のレベル深くなりますが、これを回避する方法がわからないだとして、re.findallのリターンがリストオブジェクトでどのように不便です。

+1

これは不可能です。 TLDのリストが必要です。 –

+0

@CasimiretHippolyteあなたが私の質問全体を読んだのかどうかは分かりませんが、私は自分のやり方がうまくいったと言いました。それはちょっと面倒です。 –

+0

サードパーティのモジュールをインポートせずにこの作業をしていますか? 'example.co.uk'をどうやって扱いたいのですか?あなたが提供するサンプルのために何を得ることが期待されますか?現在、 'len(tlds)== 6'です。 – phihag

答えて

1

「クイックフィックスは、」いずれかの各配列内の最後の項目を取ることです。

​​

それとも、あなたが本当に最初の試合を気にしない場合には、すべてでそれらを取得しません。

re.find('\.[a-z0-9]+$', domain, re.I) 

(文字列の末尾にマッチする$の使用に注意してください。)

しかし、それは正規表現で適切にこの問題を解決することは不可能だということに注意してください。たとえば、google.co.ukのTLDがco.ukで、ukではないことをどのように知ることができますか?

残念ながら、この問題の唯一の完全な解決策は、基本的に非常に長い(手動で更新された)すべてのTLDのリストであるpublic suffix listを実装するライブラリを使用することです。たとえば、Pythonで:https://pypi.python.org/pypi/publicsuffix/

+0

例: 'google.co.uk' TLDは' co.uk'ではない '.uk'です 最後のドットの後の最後の文字列はTLDの国別コードです。先行するものはTLDではありません。 https://en.wikipedia.org/wiki/.uk –

関連する問題