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.