11

私はPythonを初めて使用し、数週間Pythonを使用しています。文字列のリストがあり、各文字列の最初の4文字と最後の4文字を削除したいと思います。または、(特定の文字だけでなく)特定の文字パターンを削除することもできます。

私はここでアーカイブを調べてきましたが、これに一致する質問が見つからないようです。私が見つけた解決策のほとんどは、特定の文字を削除するのに適しています。

これが私が扱っている文字列リストです:

sites=['www.hattrick.com', 'www.google.com', 'www.wampum.net', 'www.newcom.com']

私がやろうとしているのは、ドメイン名を分離して取得することです

[ハットトリック、グーグル、ワムパム、ニューコム]

この質問は、ドメイン名をURLから分離することではなく(私はそれについての質問を見ました)、場所やパターンに基づいてリスト内の文字列内の特定の文字を編集することについてです。

これまで、.split、.translate、.stripを試しましたが、検索に一致する文字が多すぎるため、特定のパターンを認識するのに適していないため、これらは私がやろうとしていることに適していないようです。 /文字のグループ化、または文字列内の文字の位置を処理できません。

ご質問やご提案をいただければ幸いです。この質問を間違った方法で行っている場合など、お詫び申し上げます。

4

5 に答える 5

15
def remove_cruft(s):
    return s[4:-4]

sites=['www.hattrick.com', 'www.google.com', 'www.wampum.net', 'www.newcom.com']
[remove_cruft(s) for s in sites]

結果:

['hattrick', 'google', 'wampum', 'newcom']

削除したい文字列がすべてわかっている場合はreplace、それらを削除するために使用できます。これは、すべてのURLが「www。」で始まるかどうかわからない場合、またはTLDの長さが3文字でない場合に役立ちます。

def remove_bad_substrings(s):
    badSubstrings = ["www.", ".com", ".net", ".museum"]
    for badSubstring in badSubstrings:
        s = s.replace(badSubstring, "")
    return s

sites=['www.hattrick.com', 'www.google.com', 
'www.wampum.net', 'www.newcom.com', 'smithsonian.museum']
[remove_bad_substrings(s) for s in sites]

結果:

['hattrick', 'google', 'wampum', 'newcom', 'smithsonian']
于 2012-08-06T17:27:10.790 に答える
5

tldextractモジュールを使用できます。これは、文字列を自分で解析するよりもはるかに堅牢です。

>>> sites=['www.hattrick.com', 'google.co.uk',
           'apps.s3.stackoverflow.com', 'whitehouse.gov']
>>> import tldextract
>>> [tldextract.extract(s).domain for s in sites]
['hattrick', 'google', 'stackoverflow', 'whitehouse']
于 2012-08-06T17:33:07.623 に答える
2

これはあなたが意味することですか:

>>> sites=['nosubdomain.net', 'ohcanada.ca', 'www.hattrick.com', 'www.google.com', 'www.wampum.net', 'www.newcom.com']
>>> print [x.split('.')[-2] for x in sites]
['nosubdomain', 'ohcanada', 'hattrick', 'google', 'wampum', 'newcom']
于 2012-08-06T17:34:21.397 に答える
1

あなたの主題を読んで、これは答えです、しかし多分あなたが探しているものではありません。

for site in sites:
    print(site[:4]) # www .
    print(site[-4:]) # .com / .net / ...

正規表現を使用することもできます。

import re
re.sub('^www\.','',sites[0])  # removes 'www.' if exists
re.sub('\.\w+$','',sites[0])  # removes chars after last dot & dot
于 2012-08-06T17:28:51.387 に答える
0

特定の文字を削除するための要件についてはわかりませんが、最初と最後の4文字を削除するだけの場合は、Pythonの組み込みスライスを使用できます。

str = str[4:-4]

これにより、インデックス4から始まり、文字列の最後から4番目のインデックスまでのサブストリングが得られます。

編集:ここにPythonのスライス表記に関する多くの情報を提供する良い質問があります。

于 2012-08-06T17:28:19.587 に答える