Aufteilen des letzten Trennzeichens in der Python-Zeichenfolge?


202

Was ist die empfohlene Python-Redewendung zum Teilen einer Zeichenfolge beim letzten Auftreten des Trennzeichens in der Zeichenfolge? Beispiel:

# instead of regular split
>> s = "a,b,c,d"
>> s.split(",")
>> ['a', 'b', 'c', 'd']

# ..split only on last occurrence of ',' in string:
>>> s.mysplit(s, -1)
>>> ['a,b,c', 'd']

mysplitnimmt ein zweites Argument, das das Auftreten des zu teilenden Trennzeichens ist. Bedeutet wie bei der regulären Listenindizierung -1den letzten vom Ende. Wie kann das gemacht werden?

Antworten:


354

Verwenden Sie .rsplit() oder .rpartition()stattdessen:

s.rsplit(',', 1)
s.rpartition(',')

str.rsplit()Hier können Sie festlegen, wie oft geteilt werden soll, während str.rpartition()nur einmal geteilt wird, aber immer eine feste Anzahl von Elementen (Präfix, Trennzeichen und Postfix) zurückgegeben wird. Dies ist für den Fall der einzelnen Teilung schneller.

Demo:

>>> s = "a,b,c,d"
>>> s.rsplit(',', 1)
['a,b,c', 'd']
>>> s.rsplit(',', 2)
['a,b', 'c', 'd']
>>> s.rpartition(',')
('a,b,c', ',', 'd')

Beide Methoden beginnen von der rechten Seite des Strings aus zu teilen. Wenn Sie str.rsplit()als zweites Argument ein Maximum angeben, können Sie nur die am weitesten rechts stehenden Vorkommen aufteilen.


19

Sie können rsplit verwenden

string.rsplit('delimeter',1)[1]

Um die Zeichenfolge von der Rückseite zu erhalten.


5

Ich habe das nur zum Spaß gemacht

    >>> s = 'a,b,c,d'
    >>> [item[::-1] for item in s[::-1].split(',', 1)][::-1]
    ['a,b,c', 'd']

Achtung : Lesen Sie den ersten Kommentar unten, wo diese Antwort schief gehen kann.


2
"Nur zum Spaß", aber auch sehr falsch, denn wenn das Trennzeichen nicht nur ein einzelnes Zeichen oder ein wiederholtes Zeichen ist, wählen Ihre Teilungen bestenfalls die falschen Punkte aus, auf die geteilt werden soll.
Martijn Pieters
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.