Python 3 expresión regular para encontrar comentarios multilínea

Estoy tratando de encontrar bloques de comentarios en el código fuente de PHP usando expresiones regulares en Python 3. Los comentarios de PHP están en este formato:

/** * This is a very short block comment */ 

Ahora se me ocurrió la siguiente expresión regular:

 '/\*\*[.]+?\*/' 

Me imagino que, en combinación con la bandera DOTALL, debería hacerlo, pero no. No encuentra nada. Lo extraño es que cuando elimino la barra diagonal, de esta manera:

 '/\*\*[.]+?\*' 

entonces encuentra la siguiente cadena:

 /**\n\t* 

No tengo ni idea de por qué la expresión regular no puede encontrar un asterisco seguido de una barra inclinada … Revisé el archivo que buscaba para verificar que no hubiera un error tipográfico en el comentario (no lo hice). Además, una barra no es un carácter especial en expresiones regulares, por lo que no tendría que escapar de ella. (Lo intenté, pero no sirvió).

¿Alguien puede decirme qué está mal con mi expresión regular? 🙂

Por cierto, también me encontré con esto ! Hilo donde alguien trató de hacer lo mismo en Java. La última respuesta ganadora terminó su expresión regular de la misma manera que lo hago ahora, así que no tengo ni idea 🙁 ¿Podría ser esto un error en la expresión regular de Python o me estoy perdiendo algo por completo?

¡Cualquier ayuda es muy apreciada! :RE

Puedes usar la bandera re.DOTALL para hacer el . nuevas líneas de juego de caracteres:

 re.compile(r'/\*\*.+?\*/', re.DOTALL) 

(Como nota al margen, los comentarios en bloque de PHP pueden comenzar con /* , no solo /** .)

Prueba esto:

 r'\/\*\*[^*]*\*+([^/][^*]*\*+)*\/' 

(esta es la expresión regular utilizada por algunos analizadores de CSS para /* CSS comments */ , así que creo que es bastante sólida)

No coincidirá con el formato exacto, incluidos los saltos de línea y los asteriscos internos, pero puede solucionarlo. Esto coincidirá con:

 /** * This is a very short block comment */ 

Pero también:

 /** This is a very short block comment */ 

E incluso:

 /** This is a very short block comment */ 

Para hacer coincidir el formato exacto de los docblocks, necesitarías un analizador real, no expresiones regulares.