2013-07-26 14 views
9

Come cancellerei tutto dopo un determinato carattere di una stringa in python? Ad esempio, ho una stringa contenente un percorso file e alcuni caratteri extra. Come cancellerei tutto dopo .zip? Ho provato rsplit e split, ma non incluso il .zip quando si eliminano caratteri extra.Come cancellare tutto dopo un determinato carattere in una stringa?

Qualche suggerimento?

+0

possibile duplicato (http://stackoverflow.com/questions/904746/how -to-remove-all-characters-after-a-specifico-character-in-python) –

risposta

13

basta prendere la prima parte della scissione, e aggiungere '.zip' indietro:

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

In alternativa è possibile utilizzare l'affettatura, ecco una soluzione in cui non è necessario aggiungi '.zip' Torna al risultato (il 4 proviene da len('.zip')):

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

O un'altra alternativa con le espressioni regolari:

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

Utilizzare fette:

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

ed è facile da trasportare quanto sopra in una piccola funzione di supporto:

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

removeAfter('test.zip.xyz', '.zip') 
=> 'test.zip' 
1

È possibile utilizzare il modulo re:

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

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' 
1

Penso che sia facile creare una semplice funzione lambda per questo.

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

Può essere usato in questo modo: [? Come rimuovere tutti i caratteri dopo un carattere specifico in python]

mystr = "this should stay.zipand this should be removed." 
mystrip(mystr, ".zip") # 'this should stay.zip' 
+0

Non è semplicemente la risposta di Óscar López? Inoltre non sono sicuro di vedere il punto di usare un 'lambda' se hai intenzione di dargli un nome. – DSM

+0

Hai ragione ma le risposte si sono presentate rapidamente e non ho aggiornato la pagina prima di postare .. F.J ha anche una risposta simile. – joente