it-swarm.com.de

Aufteilen auf das letzte Trennzeichen in Python string?

Was ist die empfohlene Python idiom für das Aufteilen einer Zeichenfolge auf das letzte Vorkommen des Begrenzers 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']

mysplit verwendet ein zweites Argument, das das Vorkommen des Trennzeichens darstellt, das geteilt werden soll. Wie bei der regulären Listenindizierung wird -1 bedeutet das Letzte vom Ende. Wie geht das?

156
user248237

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

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

Mit str.rsplit() können Sie angeben, wie oft geteilt werden soll, während str.rpartition() nur einmal teilt, aber immer eine feste Anzahl von Elementen (Präfix, Begrenzer und Postfix) zurückgibt und für den Fall der einzelnen Teilung schneller ist .

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 mit dem Aufteilen von der rechten Seite der Zeichenfolge. Wenn Sie str.rsplit() als zweites Argument ein Maximum angeben, können Sie nur die Vorkommen ganz rechts aufteilen.

274
Martijn Pieters

Sie können rsplit verwenden

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

Um die Zeichenfolge von der Rückseite zu bekommen.

10
Vivek Ananthan

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']
4
ViKiG