¿Se divide en el último delimitador en la cadena Python?

205

¿Cuál es el idioma recomendado de Python para dividir una cadena en la última aparición del delimitador en la cadena? ejemplo:

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

mysplittoma un segundo argumento que es la aparición del delimitador que se dividirá. Al igual que en la indexación de lista regular, -1significa el último desde el final. ¿Cómo se puede hacer esto?

Martijn Pieters
fuente

Respuestas:

358

Use .rsplit() o en su .rpartition()lugar:

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

str.rsplit()le permite especificar cuántas veces dividir, mientras que str.rpartition()solo se divide una vez, pero siempre devuelve un número fijo de elementos (prefijo, delimitador y postfijo) y es más rápido para el caso de división simple.

Manifestación:

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

Ambos métodos comienzan a dividirse desde el lado derecho de la cadena; Al dar str.rsplit()un máximo como segundo argumento, puede dividir solo las ocurrencias más a la derecha.

Martijn Pieters
fuente
19

Puedes usar rsplit

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

Para obtener la cadena de reversa.

Vivek Ananthan
fuente
5

Solo hice esto por diversión

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

Precaución : Consulte el primer comentario a continuación, donde esta respuesta puede salir mal.

ViKiG
fuente
2
'solo por diversión' pero también muy equivocado, porque si el delimitador no es solo un carácter único o un carácter repetido, sus divisiones elegirán, en el mejor de los casos, los puntos incorrectos para dividir.
Martijn Pieters