expresiones regulares

Luis Rodrigo Gallardo Cruz rodrigo en nul-unu.com
Sab Jul 15 01:29:03 CEST 2006


On Fri, Jul 14, 2006 at 05:25:24PM -0500, Juan Fernando Estrada wrote:
> saludos, soy muy novato en este assunto de las expresiones regulares
> a ver si me puede ayudar
> 
> de esta cadena
> 
> select codigo,nombre,func_test(a,b) from test1,test2 where 
> test1.codigo=test2.codigo and nombre=__nombre__
> 
> 
> necesito extraer por separado
> codigo
> nombre
> func_test(a,b)
> 
> 
> y por otro lado necesito extraer
> 
> __nombre__

¿Siempre hay la misma cantidad de 'cosas' separadas por comas? Creo
que es más fácil si lo haces por partes. algo así como:

regexp1 = 'select (.*) from (.*) where (.*)'

que en este caso te dejaría como 'matches':

1: 'codigo,nombre,func_test(a,b)'
2: 'test1,test2'
3: 'test1.codigo=test2.codigo and nombre=__nombre__'

Luego partes 1 con split en las ','
Y le aplicas una nueva regexp a 3

regexp2 = '.*nombre=([^ ]*)'

que dejaría como 'match' todo lo 'no espacios' que sigue al =

Las cosas se complican si __nombre__ puede contener espacios y va
entrecomillado, por que entonces además hay que tomar en cuenta que
las comillas pueden ir escapadas. Si tu caso es así, mejor buscate un
parser de SQL :-) (El proyecto Gadfly debe incluir uno).

-- 
Rodrigo Gallardo
GPG-Fingerprint: 7C81 E60C 442E 8FBC D975  2F49 0199 8318 ADC9 BC28
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://mail.python.org/pipermail/python-es/attachments/20060714/86003d83/attachment.pgp>
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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