How to delete everything after a certain character in a string?

前端 未结 5 1144
無奈伤痛
無奈伤痛 2021-02-13 20:10

How would I delete everything after a certain character of a string in python? For example I have a string containing a file path and some extra characters. How would I delete e

相关标签:
5条回答
  • 2021-02-13 20:15

    Use slices:

    s = 'test.zip.xyz'
    s[:s.index('.zip') + len('.zip')]
    => 'test.zip'
    

    And it's easy to pack the above in a little helper function:

    def removeAfter(string, suffix):
        return string[:string.index(suffix) + len(suffix)]
    
    removeAfter('test.zip.xyz', '.zip')
    => 'test.zip'
    
    0 讨论(0)
  • 2021-02-13 20:23

    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'
    
    0 讨论(0)
  • 2021-02-13 20:23

    I think it's easy to create a simple lambda function for this.

    mystrip = lambda s, ss: s[:s.index(ss) + len(ss)]
    

    Can be used like this:

    mystr = "this should stay.zipand this should be removed."
    mystrip(mystr, ".zip") # 'this should stay.zip'
    
    0 讨论(0)
  • 2021-02-13 20:27

    You can use the re module:

    import re
    re.sub('\.zip.*','.zip','test.zip.blah')
    
    0 讨论(0)
  • 2021-02-13 20:35

    Just take the first portion of the split, and add '.zip' back:

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

    Alternatively you could use slicing, here is a solution where you don't need to add '.zip' back to the result (the 4 comes from len('.zip')):

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

    Or another alternative with regular expressions:

    import re
    s = re.match(r'^.*?\.zip', s).group(0)
    
    0 讨论(0)
提交回复
热议问题