Dividere alla prima occorrenza


309

Quale sarebbe il modo migliore per dividere una stringa alla prima occorrenza di un delimitatore?

Per esempio:

"123mango abcd mango kiwi peach"

dividere il primo mangoper ottenere:

"abcd mango kiwi peach"

Risposte:


522

Dai documenti :

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

Restituisce un elenco delle parole nella stringa, usando sep come stringa del delimitatore. Se maxsplit è dato, nella maggior parte maxsplit divisioni sono fatte (così, la lista avrà al massimo maxsplit+1gli elementi).

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

Nota: se è possibile eseguire più divisioni dopo aver raggiunto il maxsplitconteggio, l'ultimo elemento nell'elenco conterrà il resto della stringa (inclusivo di eventuali sepcaratteri / stringhe).
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: E allora. La tecnica è sempre la stessa.
Ignacio Vazquez-Abrams,

6
@Ignacio: lo sto solo sottolineando. Nessun motivo per avere una risposta parzialmente corretta al posto di una risposta completamente corretta.
Svizzero

Presuppone tecnicamente il delimitatore corretto. Il "primo" è l'indice [1]. Quello a cui stiamo tutti facendo riferimento sarebbe ovviamente l'indice zero -ith. : D Semantica.
Izaac Corbett,

27

Per me l'approccio migliore è che:

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

... perché se accade che l'occorrenza non è nella stringa otterrai "IndexError: list index out of range" .

Pertanto -1non si ottiene alcun danno perché il numero di occorrenze è già impostato su uno.


1
Come scritto prima è il numero di occorrenze in cui viene applicato il metodo split (). Il metodo troverà e applicherà solo la prima stringa "mango".
Alex

2

Puoi anche usare 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'

Il vantaggio dell'uso str.partitionè che restituirà sempre una tupla nella forma:

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

Quindi, questo rende l'estrazione, l'uscita molto flessibile come c'è sempre sarà 3 elementi della tupla risultante.


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

Questo dividerà i dati con la prima occorrenza di '.' nel valore della colonna stringa o frame di dati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.