2009-06-25 7 views
0

J'ai une chaîne de la forme "foo-bar-1.23-4", et je dois diviser à la première hypen suivi d'un chiffre, de sorte que le résultat est ['foo-bar-1.23-4 " -bar ',' 1.23-4 ']. Je l'ai essayé ce qui suit:Division de chaîne sensible au contexte, préservation des délimiteurs

>>> re.split('-\d', 'foo-bar-1.23-4', 1) 
['foo-bar', '.23-4'] 

et

>>> re.split('-(\d)', 'foo-bar-1.23-4', 1) 
['foo-bar', '1', '.23-4'] 

avec des résultats sous-optimaux. Y a-t-il un one-liner qui va m'apporter ce que je veux, sans avoir à utiliser le délimiteur avec le dernier élément?

Répondre

2

Vous étiez très proche, essayez ceci:

re.split('-(?=\d)', 'foo-bar-1.23-4', 1) 

J'utilise positive lookahead pour ce faire - au fond, je suis correspondant à un tableau de bord qui est immédiatement suivi par un caractère numérique.

0
re.split('-(?=\d)', 'foo-bar-1.23-4', 1) 

En utilisant lookahead, ce qui est exactement ce que Andrew a fait, mais m'a battu par une minute ... :-)

0

Est-ce qu'un travail avant positive?

re.split('-?=\d', 'foo-bar-1.23-4', 1) 

Je ne sais pas si vous avez besoin (et) entourant le test avant, mais donner un coup de feu.

Questions connexes