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"
Bellota
fuente

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]
Ignacio Vazquez-Abrams
fuente
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'
utdemir
fuente
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.

Alex
fuente
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.

heemayl
fuente
-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.

himanshu arora
fuente