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"

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]

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'

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.


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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.