Divisione sull'ultimo delimitatore nella stringa Python?


205

Qual è il linguaggio Python raccomandato per dividere una stringa sull'ultima occorrenza del delimitatore nella stringa? esempio:

# 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']

mysplitaccetta un secondo argomento che è la ricorrenza del delimitatore da dividere. Come nella normale indicizzazione dell'elenco, -1significa l'ultimo dalla fine. Come si può fare?

Risposte:


358

Usa .rsplit() o .rpartition()invece:

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

str.rsplit()consente di specificare quante volte suddividere, mentre str.rpartition()si divide solo una volta ma restituisce sempre un numero fisso di elementi (prefisso, delimitatore e postfisso) ed è più veloce per il singolo caso diviso.

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')

Entrambi i metodi iniziano a dividersi dal lato destro della stringa; dando str.rsplit()un massimo come secondo argomento, si arriva a dividere solo le occorrenze più a destra.


19

Puoi usare rsplit

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

Per ottenere la stringa dal retro.


5

L'ho fatto solo per divertimento

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

Attenzione : fare riferimento al primo commento in basso in cui questa risposta può andare storto.


2
'solo per divertimento' ma anche molto sbagliato, perché se il delimitatore non è solo un singolo personaggio o un personaggio ripetuto, le tue divisioni sceglieranno, nella migliore delle ipotesi, i punti sbagliati su cui dividere.
Martijn Pieters
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.