2013-07-26 18 views
9

Wie würde ich alles nach einem bestimmten Zeichen einer Zeichenfolge in Python löschen? Zum Beispiel habe ich eine Zeichenfolge, die einen Dateipfad und einige zusätzliche Zeichen enthält. Wie würde ich alles nach .zip löschen? Ich habe versucht, rsplit und split, aber weder die. Zip beim Löschen von zusätzlichen Zeichen.Wie lösche man alles nach einem bestimmten Zeichen in einer Zeichenkette?

Irgendwelche Vorschläge?

+0

möglich Duplikat (http://stackoverflow.com/questions/904746/how Alles entfernen - nach einem bestimmten Zeichen in Python –

Antwort

13

Nehmen Sie einfach den ersten Teil der geteilten und fügen '.zip' zurück:

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

Alternativ können Sie Slicing verwenden, hier ist eine Lösung, wo Sie nicht brauchen füge '.zip' zurück zu dem Ergebnis (die 4 kommt aus len('.zip')):

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

Oder einem anderen Alternative mit regulären Ausdrücken:

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

Verwenden Scheiben:

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

Und es ist einfach, die oben in einer kleinen Hilfsfunktion zu packen:

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

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

Sie das re Modul verwenden kann:

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

Ich denke, es ist einfach, eine einfache Lambda-Funktion dafür zu erstellen.

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

kann wie folgt verwendet werden: [? Wie alle Zeichen nach einem bestimmten Zeichen in Python entfernen]

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

Ist das nicht einfach Óscar López's Antwort? Ich bin mir auch nicht sicher, ob ich den Sinn habe, ein 'Lambda' zu verwenden, wenn Sie ihm sofort einen Namen geben wollen. – DSM

+0

Sie haben Recht, aber die Antworten zeigten sich schnell und ich habe die Seite nicht aktualisiert, bevor sie gepostet wurde. F.J hat auch eine ähnliche Antwort. – joente

Verwandte Themen