删除列表中字符串的前四个和后四个字符,或删除特定的字符模式

ego*_*gon 10 python list

我是Python的新手,并且已经使用了几个星期.我有一个字符串列表,并希望删除每个字符串的前四个和后四个字符.或者,删除特定字符模式(不仅仅是特定字符).

我一直在浏览档案,但似乎没有找到与此相符的问题.我发现的大多数解决方案更适合删除特定字符.

这是我正在使用的字符串列表:

sites=['www.hattrick.com', 'www.google.com', 'www.wampum.net', 'www.newcom.com']
Run Code Online (Sandbox Code Playgroud)

我想要做的是隔离域名并获得

[hattrick,google,wampum,newcom]

这个问题不是关于从URL中隔离域名(我已经看到了有关它的问题),而是基于位置或模式编辑列表中字符串中的特定字符.

到目前为止,我已经尝试过.split,.translate,.strip,但这些似乎不适合我要做的事情,因为它们要么删除太多与搜索匹配的字符,要么不适合识别特定模式/字符分组,或不能使用字符串中字符的位置.

非常感谢任何问题和建议,如果我以错误的方式提出这个问题,我会道歉.

Kev*_*vin 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]
Run Code Online (Sandbox Code Playgroud)

结果:

['hattrick', 'google', 'wampum', 'newcom']
Run Code Online (Sandbox Code Playgroud)

如果您知道要删除的所有字符串,则可以使用replace它们来删除它们.如果您不确定所有网址都以"www."开头,或者TLD长度不是三个字符,则此功能非常有用.

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]
Run Code Online (Sandbox Code Playgroud)

结果:

['hattrick', 'google', 'wampum', 'newcom', 'smithsonian']
Run Code Online (Sandbox Code Playgroud)

  • @jterrace,因为OP无疑是初学者,即使他不知道列表推导是如何工作的,我也希望答案有用.即使最后一行对他来说是不可理解的,他仍然可以理解`removeCruft`正在做他想做的工作. (4认同)
  • 为什么不只是``[s [4:-4] for s in sites]``?功能似乎有点矫枉过正 (2认同)

jte*_*ace 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']
Run Code Online (Sandbox Code Playgroud)