我是Python的新手,并且已经使用了几个星期。我有一个字符串列表,并希望删除每个字符串的前四个和后四个字符。或者,删除特定字符模式(不仅仅是特定字符)。
我一直在浏览档案,但似乎没有找到与此相符的问题。我发现的大多数解决方案更适合删除特定字符。
这是我正在使用的字符串列表:
sites=['www.hattrick.com', 'www.google.com', 'www.wampum.net', 'www.newcom.com']
我要做的是隔离域名并获取
[hattrick,google,wampum,newcom]
这个问题不是关于从URL中隔离域名(我已经看到了有关它的问题),而是根据位置或模式编辑列表中字符串中的特定字符。
到目前为止,我已经尝试过.split,.translate,.strip,但这些似乎不适合我要做的事情,因为它们要么删除太多与搜索匹配的字符,要么不能识别特定模式/字符分组,或不能与字符串中的字符位置一起使用。
非常感谢任何问题和建议,如果我以错误的方式提出这个问题我会道歉。
答案 0 :(得分: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
来删除它们。如果您不确定所有网址都以“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']
答案 1 :(得分: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']
答案 2 :(得分: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']
答案 3 :(得分:0)
我不清楚你对删除特定字符的要求,但是如果要删除前四个字符,你可以使用python的内置切片:
str = str[4:-4]
这将为您提供从索引4开始的子字符串,最多但不包括字符串的倒数第4个索引。
编辑:here是一个很好的问题,提供了很多关于python的切片表示法的信息。
答案 4 :(得分:0)
阅读你的主题,这是一个答案,但也许不是你想要的。
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