2012-01-23 5 views
7

En PHP, on peut utiliser la fonction preg_match avec le drapeau PREG_OFFSET_CAPTURE afin de rechercher un motif regex dans une chaîne et savoir ce qui suit et ce qui vient en premier. Par exemple, étant donné la chaîne aaa bbb ccc ddd eee fff, je voudrais correspondre r'ddd'-split et ont:Python recherche regex ET split

before = 'aaa bbb ccc ' 
match = 'ddd' 
after = ' eee fff' 

Comment faire cela en python? Merci

Répondre

12

Vous pouvez utiliser re.split() mais vous devez mettre entre parenthèses autour du modèle afin de sauver le match:

>>> re.split('(ddd)', 'aaa bbb ccc ddd eee fff', 1) 
['aaa bbb ccc ', 'ddd', ' eee fff'] 

mais dans ce cas, vous n'avez pas besoin expressions rationnelles:

>>> 'aaa bbb ccc ddd eee fff'.partition('ddd') 
('aaa bbb ccc ', 'ddd', ' eee fff') 

Modifier: Je devrais probablement aussi mentionner que re.split vous obtiendrez tous les groupes correspondants, donc vous devez être prêt pour cela ou utiliser des groupes non-capturer partout où vous utiliseriez des parenth ecedence:

>>> re.split('(d(d)d)', 'aaa bbb ccc ddd eee fff', 1) 
['aaa bbb ccc ', 'ddd', 'd', ' eee fff'] 
+0

Je ne sais pas que vous pouvez le faire avec 're.split()'. Merci –