2008-10-30 31 views
73

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

+0

Vea si esto ayuda [Match Objects] (http://www.python.org/doc/2.5.2/lib/match-objects.html) – EBGreen

Respuesta

93
import re 
p = re.compile("[a-z]") 
for m in p.finditer('a1b2c3d4'): 
    print m.start(), m.group() 
+4

Enlace a documentos: https://docs.python.org /2/library/re.html#re.finditer –

36

Tomado de

Regular Expression HOWTO

lapso() devuelve tanto iniciar y los índices finales en una única tupla. Como el método de coincidencia solo comprueba si el RE coincide al comienzo de una cadena, start() 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('[a-z]+') 
>>> print p.match('::: message') 
None 
>>> m = p.search('::: message') ; print m 
<re.MatchObject instance at 80c9650> 
>>> m.group() 
'message' 
>>> m.span() 
(4, 11) 

combinan con:

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

>>> p = re.compile(...) 
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...') 
>>> iterator 
<callable-iterator object at 0x401833ac> 
>>> 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'[a-z]', 'a1b2c3d4'): 
    print match.span() 
+0

Puede usarlo como 're.search (r'abbit '," tiene un bit de zanahoria "). Span (0)' - '(4, 9)' –

4

Para Python 3.x

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

Usted deberá obtener \n tuplas separadas (que comprende primero y el último de los índices el partido, respectivamente) y el partido en sí, por cada golpe en la cuerda.

Cuestiones relacionadas