ignorecase - Python Regex-Cómo obtener posiciones y valores de coincidencias
python split regex (3)
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 el primer y el último índice del partido, respectivamente) y el partido en sí, para cada golpe en el hilo.
¿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''[az]''
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.
Tomado de
span () devuelve índices de inicio y final en una sola tupla. Como el método de coincidencia solo verifica 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 explora 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)
Combina eso con:
En Python 2.2, el método finditer () también está disponible, y devuelve una secuencia de instancias de 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)
deberías poder hacer algo del orden de
for match in re.finditer(r''[a-z]'', ''a1b2c3d4''):
print match.span()
import re
p = re.compile("[a-z]")
for m in p.finditer(''a1b2c3d4''):
print m.start(), m.group()