División en la primera aparición


309

¿Cuál sería la mejor manera de dividir una cadena en la primera aparición de un delimitador?

Por ejemplo:

"123mango abcd mango kiwi peach"

dividiéndose en el primero mangopara obtener:

"abcd mango kiwi peach"

Respuestas:


522

De los documentos :

str.split([sep[, maxsplit]])

Devuelve una lista de las palabras en la cadena, usando sep como la cadena delimitadora. Si se da maxsplit , como máximo se realizan divisiones maxsplit (por lo tanto, la lista tendrá como máximo maxsplit+1elementos).

s.split('mango', 1)[1]

Nota: si se pueden realizar más divisiones después de alcanzar el maxsplitrecuento, el último elemento de la lista contendrá el resto de la cadena (incluidos los sepcaracteres / cadenas).
— BuvinJ

64
>>> s = "123mango abcd mango kiwi peach"
>>> s.split("mango", 1)
['123', ' abcd mango kiwi peach']
>>> s.split("mango", 1)[1]
' abcd mango kiwi peach'

8
@Swiss: ¿Y qué? La técnica sigue siendo la misma.
— Ignacio Vazquez-Abrams

66
@Ignacio: Solo lo estoy señalando. No hay razón para tener una respuesta parcialmente correcta en lugar de una respuesta completamente correcta.
— Suizo

Técnicamente asume el delimitador correcto. El "primero" es el índice [1]. El que todos estamos haciendo referencia sería, por supuesto, el índice cero-i. : D Semántica.
— Izaac Corbett

27

Para mí, el mejor enfoque es que:

s.split('mango', 1)[-1]

... porque si sucede que la ocurrencia no está en la cadena que obtendrás " IndexError: list index out of range".

Por -1lo tanto , no obtendrá ningún daño porque el número de ocurrencias ya está establecido en uno.


1
Como se escribió anteriormente, es la cantidad de veces que se aplica el método split (). El método buscará y aplicará solo la primera secuencia de 'mango'.
— Alex

2

También puedes usar str.partition:

>>> text = "123mango abcd mango kiwi peach"

>>> text.partition("mango")
('123', 'mango', ' abcd mango kiwi peach')

>>> text.partition("mango")[-1]
' abcd mango kiwi peach'

>>> text.partition("mango")[-1].lstrip()  # if whitespace strip-ing is needed
'abcd mango kiwi peach'

La ventaja de usar str.partitiones que siempre devolverá una tupla en la forma:

(<pre>, <separator>, <post>)

Esto hace que desempaquetar la salida sea realmente flexible ya que siempre habrá 3 elementos en la tupla resultante.


-2
df.columnname[1].split('.', 1)

Esto dividirá los datos con la primera aparición de '.' en la cadena o el valor de la columna del marco de datos.

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.