【问题标题】:How to delete everything after a certain character in a string?如何删除字符串中某个字符之后的所有内容?
【发布时间】:2013-07-26 21:37:08
【问题描述】:

如何在python中删除字符串的某个字符之后的所有内容?例如,我有一个包含文件路径和一些额外字符的字符串。我将如何删除 .zip 之后的所有内容?我试过 rsplitsplit ,但删除多余字符时都没有包含 .zip。

有什么建议吗?

【问题讨论】:

标签: python string character python-3.3


【解决方案1】:

只取拆分的第一部分,并在后面添加'.zip'

s = 'test.zip.zyz'
s = s.split('.zip', 1)[0] + '.zip'

您也可以使用切片,这是一个无需将'.zip' 添加回结果的解决方案(4 来自len('.zip')):

s = s[:s.index('.zip')+4]

或者使用正则表达式的另一种选择:

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

【讨论】:

    【解决方案2】:

    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'
    

    【讨论】:

      【解决方案3】:

      使用切片:

      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'
      

      【讨论】:

        【解决方案4】:

        您可以使用re 模块:

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

        【讨论】:

          【解决方案5】:

          我认为为此创建一个简单的 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'
          

          【讨论】:

          • 这不就是Óscar López的回答吗?如果您要立即为其命名,我也不确定我是否明白使用 lambda 的意义。
          • 你是对的,但答案很快就出现了,我在发布之前没有刷新页面。F.J 也有类似的答案。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-03
          • 2018-04-03
          • 1970-01-01
          • 2018-11-15
          • 2014-04-28
          • 2013-01-23
          相关资源
          最近更新 更多