¿Encuentra los índices de todas las coincidencias de expresiones regulares?

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)]