2012-01-23 18 views
7

En PHP se puede usar la función preg_match con la bandera PREG_OFFSET_CAPTURE para buscar un patrón de expresiones regulares dentro de una cadena y saber lo que sigue y lo que viene primero. Por ejemplo, dada la cadena aaa bbb ccc ddd eee fff, me gustaría coincidir-split r'ddd' y tienen:Python regex search AND split

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

de cómo hacer esto en Python? Gracias

Respuesta

12

Puede utilizar re.split() pero hay que poner paréntesis alrededor del patrón con el fin de salvar el partido:

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

pero en este caso no es necesario en absoluto una expresión regular:

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

Editar: Probablemente también debería mencionar que con re.split obtendrá todos los grupos coincidentes, por lo que debe estar preparado para eso o utilizar grupos que no sean de captura en cualquier lugar donde use paréntesis para pr ecedence:

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

No sabía que podía hacer eso con 're.split()'. Gracias –