Python Regex – Cómo obtener posiciones y valores de coincidencias

¿Cómo puedo obtener las posiciones inicial y final de todas las coincidencias utilizando el módulo re ? Por ejemplo, dado el patrón r'[az]' y la cadena 'a1b2c3d4' me gustaría obtener las posiciones donde encuentra cada letra. Idealmente, también me gustaría recuperar el texto del partido.

 import re p = re.compile("[az]") for m in p.finditer('a1b2c3d4'): print m.start(), m.group() 

Tomado de

Expresión regular howto

span () devuelve los índices de inicio y finalización en una sola tupla. Dado que el método de coincidencia solo verifica si la RE coincide al comienzo de una cadena, el inicio () siempre será cero. Sin embargo, el método de búsqueda de instancias de RegexObject escanea a través de la cadena, por lo que la coincidencia puede no comenzar en cero en ese caso.

 >>> p = re.compile('[az]+') >>> print p.match('::: message') None >>> m = p.search('::: message') ; print m  >>> m.group() 'message' >>> m.span() (4, 11) 

Combina eso con:

En Python 2.2, el método finditer () también está disponible, devolviendo una secuencia de instancias de MatchObject como un iterador.

 >>> p = re.compile( ... ) >>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...') >>> iterator  >>> for match in iterator: ... print match.span() ... (0, 2) (22, 24) (29, 31) 

Usted debe ser capaz de hacer algo en el orden de

 for match in re.finditer(r'[az]', 'a1b2c3d4'): print match.span() 

Para Python 3.x

 from re import finditer for match in finditer("pattern", "string"): print(match.span(), match.group()) 

Obtendrá \n tuplas separadas (que comprenden los índices primero y último de la coincidencia, respectivamente) y la coincidencia en sí misma, para cada golpe en la cadena.