Divisão na primeira ocorrência

309

Qual seria a melhor maneira de dividir uma string na primeira ocorrência de um delimitador?

Por exemplo:

"123mango abcd mango kiwi peach"

dividindo no primeiro mangoa obter:

"abcd mango kiwi peach"
Bolota
fonte

Respostas:

522

Dos documentos :

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

Retorne uma lista das palavras na sequência, usando sep como a sequência delimitadora. Se maxsplit for fornecido, no máximo as divisões maxsplit serão feitas (portanto, a lista terá no máximo maxsplit+1elementos).

s.split('mango', 1)[1]
Ignacio Vazquez-Abrams
fonte
Nota: se mais divisões puderem ser executadas após atingir a maxsplitcontagem, o último elemento da lista conterá o restante da sequência (incluindo quaisquer sepcaracteres / sequências).
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
fonte
8
@Swiss: E daí? A técnica ainda é a mesma.
Ignacio Vazquez-Abrams
6
@ Ignacio: Estou apenas apontando. Não há razão para ter uma resposta parcialmente correta no lugar de uma resposta completamente correta.
Swiss
Assume tecnicamente o delimitador correto. O 'primeiro' é o índice [1]. O que todos nós estamos referenciando seria, obviamente, o zero-ésimo índice. : D Semântica.
Izaac Corbett
27

Para mim, a melhor abordagem é a seguinte:

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

... porque se isso acontecer, a ocorrência não está na string, você receberá " IndexError: list index out of range".

Portanto -1, não haverá nenhum dano, pois o número de ocorrências já está definido como um.

Alex
fonte
1
Conforme escrito antes, é o número de ocorrências em que o método split () está sendo aplicado. O método encontrará e aplicará apenas a primeira string 'manga'.
1128 Alex
2

Você também pode 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'

A vantagem de usar str.partitioné que sempre retornará uma tupla no formato:

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

Portanto, isso facilita a descompactação do resultado, pois sempre haverá três elementos na tupla resultante.

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

Isso dividirá os dados com a primeira ocorrência de '.' no valor da coluna de sequência de caracteres ou quadro de dados.

himanshu arora
fonte