Python 如何删除字符串中某个字符后的所有内容?

Python 如何删除字符串中某个字符后的所有内容?,python,string,character,python-3.3,Python,String,Character,Python 3.3,在python中,如何删除字符串中某个字符之后的所有内容?例如,我有一个包含文件路径和一些额外字符的字符串。如何删除.zip之后的所有内容?我已经尝试了rsplit和split,但在删除额外字符时都没有包含.zip 有什么建议吗?使用切片: s = 'test.zip.xyz' s[:s.index('.zip') + len('.zip')] => 'test.zip' 在一个小助手函数中可以轻松地打包上述内容: def removeAfter(string, suffix):

在python中,如何删除字符串中某个字符之后的所有内容?例如,我有一个包含文件路径和一些额外字符的字符串。如何删除.zip之后的所有内容?我已经尝试了
rsplit
split
,但在删除额外字符时都没有包含.zip

有什么建议吗?

使用切片:

s = 'test.zip.xyz'
s[:s.index('.zip') + len('.zip')]
=> 'test.zip'
在一个小助手函数中可以轻松地打包上述内容:

def removeAfter(string, suffix):
    return string[:string.index(suffix) + len(suffix)]

removeAfter('test.zip.xyz', '.zip')
=> 'test.zip'

只需将拆分的第一部分添加回
'.zip'

s = 'test.zip.zyz'
s = s.split('.zip', 1)[0] + '.zip'
或者,您可以使用切片,这里有一个解决方案,您不需要将
'.zip'
添加回结果(
4
来自
len('.zip')
):

或者使用正则表达式的另一种替代方法:

import re
s = re.match(r'^.*?\.zip', s).group(0)

您可以使用
re
模块:

import re
re.sub('\.zip.*','.zip','test.zip.blah')

str.partition

>>> s='abc.zip.blech'
>>> ''.join(s.partition('.zip')[0:2])
'abc.zip'
>>> s='abc.zip'
>>> ''.join(s.partition('.zip')[0:2])
'abc.zip'
>>> s='abc.py'
>>> ''.join(s.partition('.zip')[0:2])
'abc.py'

我认为为它创建一个简单的lambda函数很容易

mystrip = lambda s, ss: s[:s.index(ss) + len(ss)]
可以这样使用:

mystr = "this should stay.zipand this should be removed."
mystrip(mystr, ".zip") # 'this should stay.zip'

这不就是奥斯卡·洛佩斯的答案吗?我也不确定如果你要立即给它命名,我是否明白使用
lambda
的意义。你是对的,但是答案很快就出现了,我在发布之前没有刷新页面。。F.J也有一个类似的答案
mystr = "this should stay.zipand this should be removed."
mystrip(mystr, ".zip") # 'this should stay.zip'