¿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?

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.


19

Puedes usar rsplit

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

Para obtener la cadena de reversa.


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.