Python 如何删除字符串中某个字符后的所有内容?
在python中,如何删除字符串中某个字符之后的所有内容?例如,我有一个包含文件路径和一些额外字符的字符串。如何删除.zip之后的所有内容?我已经尝试了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):
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'