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?
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)
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'
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'
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'
Vous pouvez utiliser le module re
:
import re
re.sub('\.Zip.*','.Zip','test.Zip.blah')