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?

Martijn Pieters
quelle

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.

Martijn Pieters
quelle
19

Sie können rsplit verwenden

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

Um die Zeichenfolge von der Rückseite zu erhalten.

Vivek Ananthan
quelle
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.

ViKiG
quelle
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