Die kurze Antwort, wie @ THC4K Punkte in einem Kommentar aus:
string.split(pattern, 1)[0]
wo string
Ihre ursprüngliche Zeichenfolge ist, pattern
ist Ihr „break“ -Muster zeigt 1
nicht mehr als 1 Mal zu spalten, und [0]
bedeutet, nehmen Sie das erste Element von Split zurückgegeben.
In Aktion:
>>> s = "a descriptor 23 fd"
>>> s.split("23", 1)[0]
'a descriptor '
>>> s.split("fdasfdsafdsa", 1)[0]
'a descriptor 23 fd'
Dies ist ein viel kürzerer Weg auszudrücken, was ich früher geschrieben hatte, die ich hier sowieso halten.
Und wenn Sie mehrere Muster entfernen müssen, ist dies ein großer Kandidat für die reduce
builtin:
>>> string = "a descriptor dps foo 23 bar fd quux"
>>> patterns = ["dps", "23", "fd"]
>>> reduce(lambda s, pat: s.split(pat, 1)[0], patterns, string)
'a descriptor '
>>> reduce(lambda s, pat: s.split(pat, 1)[0], patterns, "uiopuiopuiopuipouiop")
'uiopuiopuiopuipouiop'
Diese im Grunde sagt: für jede pat
in patterns
: string
nehmen und immer wieder string.split(pat, 1)[0]
gelten (wie oben erläutert), wobei jedes Mal das Ergebnis des zuvor zurückgegebenen Wertes bearbeitet wird. Wie Sie sehen können, wenn keines der Muster in der Zeichenfolge enthalten ist, wird die ursprüngliche Zeichenfolge weiterhin zurückgegeben.
Die einfachste Antwort ist eine Liste/string Scheibe mit einem string.find
kombiniert:
>>> s = "a descriptor 23 fd"
>>> s[:s.find("fd")]
'a descriptor 23 '
>>> s[:s.find("23")]
'a descriptor '
>>> s[:s.find("gggfdf")] # <-- look out! last character got cut off
'a descriptor 23 f'
Ein besseren Ansatz (zur Vermeidung von dem letzten Zeichen in einem fehlenden Muster abschneidet, wenn s.find
-1 zurück) könnte sein, in einer einfachen Funktion zu umhüllen:
>>> def cutoff(string, pattern):
... idx = string.find(pattern)
... return string[:idx if idx != -1 else len(string)]
...
>>> cutoff(s, "23")
'a descriptor '
>>> cutoff(s, "asdfdsafdsa")
'a descriptor 23 fd'
[:s.find(x)]
die Syntax den Teil der Zeichenfolge aus dem Index 0, bis die rechten h dauern und Seite des Doppelpunktes; In diesem Fall ist RHS das Ergebnis von s.find
, das den Index der übergebenen Zeichenfolge zurückgibt.
In Ihre Beispiele, was die Codes sind, und was sollte wie die Ausgabe aussehen? –