Estoy analizando cadenas que podrían tener cualquier número de cadenas citadas dentro de ellas (estoy analizando el código y tratando de evitar PLY). Quiero saber si se ha citado una subcadena y tengo el índice de subcadenas. Mi idea inicial fue usar re para encontrar todas las coincidencias y luego averiguar el rango de índices que representan.
Parece que debería usar re con una expresión regular como \"[^\"]+\"|'[^']+'
(Estoy evitando tratar con el triple de comillas y esas cadenas en este momento). Cuando uso findall () Obtengo una lista de las cadenas coincidentes, que es algo agradable, pero necesito índices.
Mi subcadena puede ser tan simple como c
, y tengo que averiguar si esta c
particular está citada o no.
Esto es lo que quieres: ( fuente )
re.finditer(pattern, string[, flags])
Devuelva un iterador que genere instancias de MatchObject sobre todas las coincidencias no superpuestas para el patrón RE en la cadena. La cadena se escanea de izquierda a derecha y las coincidencias se devuelven en el orden encontrado. Las coincidencias vacías se incluyen en el resultado a menos que toquen el comienzo de otra coincidencia.
A continuación, puede obtener las posiciones inicial y final de los MatchObjects.
p.ej
[(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]