11

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

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

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

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

我要做的是隔离域名并获取

[hattrick, 谷歌, wampum, newcom]

这个问题不是关于从 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 不是三个字符长,这将很有用。

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

我不清楚您对删除特定字符的要求,但如果您只想删除第一个和最后四个字符,您可以使用 python 的内置切片:

str = str[4:-4]

这将为您提供从索引 4 开始的子字符串,直到但不包括字符串的倒数第四个索引。

编辑:是一个很好的问题,它提供了很多关于 python 切片符号的信息。

于 2012-08-06T17:28:19.587 回答