Fractionnement à la première occurrence

309

Quelle serait la meilleure façon de diviser une chaîne lors de la première occurrence d'un délimiteur?

Par exemple:

"123mango abcd mango kiwi peach"

se divisant le premier mangopour obtenir:

"abcd mango kiwi peach"
Gland
la source

Réponses:

522

De la documentation :

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

Renvoie une liste des mots de la chaîne, en utilisant sep comme chaîne de délimitation. Si maxsplit est donné, tout au plus maxsplit est effectué (ainsi, la liste aura au plus des maxsplit+1éléments).

s.split('mango', 1)[1]
Ignacio Vazquez-Abrams
la source
Remarque: si plusieurs scissions peuvent être effectuées après avoir atteint le maxsplitnombre, le dernier élément de la liste contiendra le reste de la chaîne (y compris tous les sepcaractères / chaînes).
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
la source
8
@Swiss: Et alors? La technique est toujours la même.
Ignacio Vazquez-Abrams
6
@ Ignacio: Je le fais juste remarquer. Aucune raison d'avoir une réponse partiellement correcte à la place d'une réponse complètement correcte.
Swiss
Suppose techniquement le délimiteur correct. Le «premier» est l'index [1]. Celui auquel nous faisons tous référence serait bien sûr le zéro-ième indice. : D Sémantique.
Izaac Corbett
27

Pour moi, la meilleure approche est que:

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

... car si cela arrive, cette occurrence n'est pas dans la chaîne, vous obtiendrez " IndexError: list index out of range".

Par conséquent -1, aucun dommage ne sera causé, car le nombre d'occurrences est déjà défini sur un.

Alex
la source
1
Comme écrit précédemment, c'est le nombre d'occurrences dans lesquelles la méthode split () est appliquée. La méthode ne trouvera et n'appliquera que la première chaîne "mango".
Alex
2

Vous pouvez également utiliser 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'

L'avantage d'utiliser str.partitionest qu'il va toujours retourner un tuple sous la forme:

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

Ainsi, le déballage de la sortie est vraiment flexible car il y aura toujours 3 éléments dans le tuple résultant.

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

Cela divisera les données avec la première occurrence de '.' dans la chaîne ou la valeur de colonne du bloc de données.

himanshu arora
la source