2016-07-29 4 views
0

私は例えばのURL でドメインを削除したいですユーザーは、www.google.com 入っしかし pythonのURLから.comを削除するには?

がどのようにPythonでこれを行うには、私は唯一のwww.google必要ですか? おかげ

+3

ユーザーが「www.google.com.au」または「www.google.co.uk」と入力した場合はどうなりますか? – mhawke

+0

@Aryan、あまりにも海外にあるように、より詳細な質問を編集して、要件に絞り込んでください! –

+0

私はそれはあなたがURLを操作するために設定したときに、実際の要件は、すべての可能なケースであるかを考え出すことは、通常ははるかに困難にコードを書くよりもあると付け加えた価値があると思います。 –

答えて

0

あなたはすべての可能なドメインdomainsのリストを持っている場合は、それ

url = 'www.google.com' 
cut_url = str[:-4] 
# output : 'www.google' 

より高度な答え

をスライスし、最後に4つの文字を削除したい場合は:

domains = ['com', 'uk', 'fr', 'net', 'co', 'nz'] # and so on... 
while True: 
    domain = url.split('.')[-1] 
    if domain in domains: 
     url = '.'.join(url.split('.')[:-1]) 
    else: 
     break 

または、例えば、あなたが.co.ukが分離されていないドメインのリストを持っている、とします

domains = ['.com', '.co.uk', '.fr', '.net', '.co.nz'] # and so on... 
for domain in domains: 
    if url.endswith(domain): 
     cut_url = url[:-len(domain)] 
     break 
else: # there is no indentation mistake here. 
     # else after for will be executed if for did not break 
    print('no known domain found') 
+0

'www.mysite.io'または' www.mysite.om'はどうですか? ..等 –

+0

多分 '' .'join(mystr.split( '。')[: - 1]) 'です。しかし、 '.co.uk'はどうですか? 「.com」と「google.com」と「www.google.com」はすべて異なる種類のドメインであるのに対し、質問者は「ドメインを削除する」と述べているため、この問題は不十分です。実際の問題に応じて、完全な解決策がMozilla Public Suffix Listを使用する必要があります。 –

+0

これらのケースを含めるように編集しようとしていましたが、最初にOPの質問に対して簡単な回答を提供したいと思ったのですが、 – BusyAnt

3

これは非常に一般的な質問です。次のようにしかし、最も狭い答えは(と仮定しurlが問題のURLを保持している)のようになります。

if url.endswith(".com"): 
    url = url[:-4] 

あなたはそれの右への最後の期間、すべてを削除したい場合は、コードがもう少し複雑になります:

pos = url.rfind('.') # find rightmost dot 
if pos >= 0:   # found one 
    url = url[:pos] 
+1

'url.rsplit( '。'、1)[0]'は一番右のドットで分割して最初の項目を返す –

+1

@MosesKoledoye:または 'url.rpartition( '。')[0] '。 –

+0

@SteveJessopが指摘しているように、eTLD(実効トップレベルドメイン)は複数のコンポーネントで構成されている可能性があります。たとえば、 '.co.uk'は元々アメリカの、現在はグローバルな' .com'ドメインの英国に相当します。 – holdenweb

2

これを解決するには、ドメイン名の扱いに問題がなければ、左側からドットを探し、2番目のドットで停止します。

t = 'www.google.com' 
a = t.split('.')[1] 
pos = t.find(a) 
t = t[:pos+len(a)] 

>>> 'www.google' 
+0

'meta.codereview.stackexchange.com'では動作しません。アイロニーは意図されていません。 – BusyAnt

+1

あなたは良い極端なテストをしています:) – Learner

+0

これには複数の '.'があるものでは失敗します。 – Mast

-1

ここに必要なものはrstripです。

は、このコードを試してみてください:文字列が存在する場合

url = 'www.google.com' 
url2 = 'www.google' 

new_url = url.rstrip('.com') 
print (new_url) 

new_url2 = url2.rstrip('.com') 
print (new_url2) 

rstripはこの場合のみ ".COM" で、取り除くことができます。そうでない場合は、そのまま放置します。 rstripは、 '最も右の'一致文字列を取り除くためのもので、lstripはこれとは逆です。これらを確認してくださいdocsstriplstripの機能もチェックしてください。それはここで別の答えに近い関連けれども私は、別の解決策を提出してい

UPDATE

@SteveJessopは、上記の例ことを指摘したように適切なソリューションではありません、それは文字列がで終わっている場合は最初にチェックしません「.com」。

url = 'www.foo.com' 
if url.endswith('.com'): 
    url = url[:-4] 
    print (url) 
+0

まあ、「www.foo.com」.rstrip( '。com') 'は' www.f'です –

+0

読者がうまくいかない場合*なぜ*これはそうです、 'rsrtrip'の引数文字の_set_を指定します。文字セットのいずれかとすべてが文字列の右端から削除されます。 – holdenweb

+0

@SteveJessop、それを指摘してくれてありがとう:)感謝します!更新されたソリューションについてどう思いますか?別のユーザーの回答に関連しているにもかかわらず、これは質問者に役立つはずです – i333

関連する問題