[Python-es] expresiones regulares
Esteban Manchado Velázquez
zoso en foton.es
Jue Ago 1 12:23:54 CEST 2002
On Thu, Aug 01, 2002 at 11:47:01AM +0200, Attila Saorin wrote:
> --- Jose Alejandro Perez Rubio <perezj en si.uji.es> escribió:
> > No se si he entendido lo que preguntas, pero creo que esto te puede
> > ayudar:
> >
> > import re
> >
> > # los paréntesis no escapados delimitan un grupo
> > # al que luego accederemos mediante groups
> >
> > a = re.compile( ".*\((.*)\).*" )
> > b = a.match( 'linux or (sun and bsd)')
> >
> > print b.groups()[0]
> > sun and bsd
>
> Gracias, funciona :), pero no entiendo porque al escapar los parentesis los
> pones dos veces, es decir, al si queremos escapar un parentesis ponemos
> delante '\' de el, entonces porque pones otro parentesis despues?
El otro paréntesis es para que se guarde el contenido, para poder
consultarlo después. Es decir, que para cazar dos palabras separadas por "or",
en un ejemplo sin paréntesis, como "linux or sun", deberías poner algo como:
a = re.compile("(.*) or (.*)")
> alguno de los metodos del modulo 're' permite recuperar lo que hay antes del
> parentesis, es decir, de lo que hemos sacado o simplemente lo recupero con
> un split o miro si has parentesis y cojo lo de antes y despues?
Todo lo que quieras sacar seguramente será mejor marcarlo con paréntesis,
para poder consultarlo fácilmente después.
> [...]
> tambien me queda claro y es sencillo, el problema de esto es que no veria
> los casos con dos o mas bloque de parentesis, porque el find busca el
> primero y el rfind el ultimo, con lo que un ejemplo como: '(sun or linux)
> and (www and http)' no funciona bien:
Cada vez estoy más convencido de que lo que necesitas es un analizador
completo. Será muy simple, pero desde luego mucho más claro que estar
escribiendo un montón de insultos de cómic para intentar cubrir todos los
casos :-)
--
Esteban Manchado Velázquez <zoso*demiurgo*org> - http://www.demiurgo.org
No software patents in Europe! - freepatents.org - proinnova.hispalinux.es
Join Amnesty International - http://www.amnesty.org/actnow
PD: Con «insultos de cómic» me refiero a los caracteres raros de las
expresiones regulares, claro.
Más información sobre la lista de distribución Python-es