Fractionnement sur le dernier délimiteur dans la chaîne Python?


205

Quel est l'idiome Python recommandé pour fractionner une chaîne sur la dernière occurrence du délimiteur dans la chaîne? exemple:

# instead of regular split
>> s = "a,b,c,d"
>> s.split(",")
>> ['a', 'b', 'c', 'd']

# ..split only on last occurrence of ',' in string:
>>> s.mysplit(s, -1)
>>> ['a,b,c', 'd']

mysplitprend un deuxième argument qui est l'occurrence du délimiteur à diviser. Comme dans l'indexation de liste régulière, -1signifie le dernier depuis la fin. Comment cela peut-il être fait?

Réponses:


358

Utilisez .rsplit() ou à la .rpartition()place:

s.rsplit(',', 1)
s.rpartition(',')

str.rsplit()vous permet de spécifier le nombre de fois à diviser, tandis que str.rpartition()ne se divise qu'une seule fois mais renvoie toujours un nombre fixe d'éléments (préfixe, délimiteur et postfix) et est plus rapide pour le cas de fractionnement unique.

Démo:

>>> s = "a,b,c,d"
>>> s.rsplit(',', 1)
['a,b,c', 'd']
>>> s.rsplit(',', 2)
['a,b', 'c', 'd']
>>> s.rpartition(',')
('a,b,c', ',', 'd')

Les deux méthodes commencent à se séparer du côté droit de la chaîne; en donnant str.rsplit()un maximum comme deuxième argument, vous pouvez diviser uniquement les occurrences les plus à droite.


19

Vous pouvez utiliser rsplit

string.rsplit('delimeter',1)[1]

Pour obtenir la chaîne de l'inverse.


5

Je l'ai juste fait pour le plaisir

    >>> s = 'a,b,c,d'
    >>> [item[::-1] for item in s[::-1].split(',', 1)][::-1]
    ['a,b,c', 'd']

Attention : Référez-vous au premier commentaire ci-dessous où cette réponse peut mal tourner.


2
'juste pour le plaisir' mais aussi très faux, car si le délimiteur n'est pas seulement un caractère unique ou un caractère répété, vos divisions choisiront, au mieux, les mauvais points sur lesquels se diviser.
Martijn Pieters
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.