web-dev-qa-db-fra.com

Comment tout supprimer après un certain caractère dans une chaîne?

Comment pourrais-je tout supprimer après un certain caractère d'une chaîne en python? Par exemple, j'ai une chaîne contenant un chemin de fichier et des caractères supplémentaires. Comment pourrais-je tout supprimer après .zip? J'ai essayé rsplit et split, mais je n'ai pas non plus inclus le .Zip lors de la suppression de caractères supplémentaires.

Aucune suggestion?

11
ThatGuyJay

Prenez juste la première partie de la scission et ajoutez '.Zip':

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

Sinon, vous pouvez utiliser le découpage en tranches. Voici une solution qui vous évite d'ajouter '.Zip' au résultat (le 4 provient de len('.Zip')):

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

Ou une autre alternative avec des expressions régulières:

import re
s = re.match(r'^.*?\.Zip', s).group(0)
15
Andrew Clark

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'
11
Robᵩ

Utilisez des tranches:

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

Et il est facile d’emballer ce qui précède dans une petite fonction d’aide:

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

removeAfter('test.Zip.xyz', '.Zip')
=> 'test.Zip'
5
Óscar López

Je pense qu'il est facile de créer une fonction lambda simple pour cela.

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

Peut être utilisé comme ceci:

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

Vous pouvez utiliser le module re:

import re
re.sub('\.Zip.*','.Zip','test.Zip.blah')
1
jh314