Expresiones regulares

Daniel Ripollés Climent ripolles en aditel.org
Mie Ene 14 12:30:35 CET 2004


Mensaje citado por Sergi Faber:

> Hola,
> 
> Estoy atascado con las expresiones regulares. Estoy empezando a aprender su
> manejo pero hay un tema concreto en el que no veo la luz. Me interesa extraer
> todo el texto entre tags de un fichero HTML, pero conservando algunos
> relativos a la presentación como '<b>', '</b>', '<i>', '</i>', '<cite>', etc.
> 
> [ ejemplos y explicaciones ]
>
> Bueno, disculpad la extensión. Ya se que no es una pregunta específica de
> Python y que igual es una simpleza, pero una ayuda me vendría genial.
> 
La verdad es que puede ser de todo, excepto una simpleza; en realidades una
pregunta muy común con una solución no tan trivial. Muchisima gente se plantea
utilizar expresiones regulares para parsear HTML o similares, y en todos los
foros la respuesta viene a ser la misma: No uses expresiones regulares para
parsear un lenguaje de marcas.

Antes de liarme con explicaciones, intentaré aproximar una solución: existen
módulos estándar que parsean SGML, pero según he leido son _MUY_ estrictos y no
pasarán como bueno un documento cuya sintaxis no sea PERFECTA (la gran mayoria
de webs contienen HTML que aunque sale bien en los navegadores, no es 100%
correcto). Alternativamente hay algún módulo en SourceForge que parece ser que
permite queel HTML no sea perfecto;probablemente alguiende lalista (o google) te
pueda ayudar.

Por otra parte, aprovecho para explicar que el HTML y sus primos son lenguajes
que necesitan al menos la capacidad computacional de un lenguaje de pila para
ser parseados. Las expresiones regulares se encuentran un nivel por debajo de
esta capacidad, por lo que se necesita una buena combinación de expresiones
regulares y lógica de programa si se quiere llegar a parsear bien HTML (y
apañárselas con los errores sintácticos,decidiendo incluso si son "admisibles" o
no!!) usando expresiones regulares. En resumen, que las expresiones regulares
son geniales para una gran cantidad de problemas...pero infernales para el
resto, y no conviene obsesionarse con usarlas _para todo_. Como se suele
decir,si solo tienes un martillo, todos los problemas son clavos.

Hala pues, espero haber contribuido en algo positivo :)

-- 
Daniel Ripolles ( Eru )
http://www.aditel.org/~ripolles




Más información sobre la lista de distribución Python-es