[pyar] regexp fun

German Jimenez germanjimenez84 en gmail.com
Mar Abr 4 19:54:55 ART 2017


Esto?

it = foo.finditer("foo[bar][buz][quuz]")

y después iterar sobre los matches

next(it).groups() ....

El 3 de abril de 2017, 22:45, Mauro Caceres <mauro.caceres en gmail.com>
escribió:

> Lo que dice Matias se produce porque estás usando el '*' que al ser greedy
> se va al final del texto donde tenés un match. Una NO solucion, pero para
> ver que si funciona podrias especificar un mínimo y máximo de repeticiones
> del grupo
>
> Disclaimer; lo estoy diciendo sin probar, como me suena y con un bebe en
> brazo llorando
>
> El lun., 3 abr. 2017 20:16, Javier Haramina <jharamina en gmail.com>
> escribió:
>
>> A mi me parece que podes utilizar una función recursiva, que funciona muy
>> bien para este tipo de estructuras. Ojo la limitante es el stack procedure
>> call , si no son demasiados los datos te va a funcionar muy bien.
>>
>> Javier
>>
>>
>>
>> *De:* pyar [mailto:pyar-bounces en python.org.ar] *En nombre de *Matías
>> Bellone
>> *Enviado el:* lunes, 03 de abril de 2017 19:15
>> *Para:* Python Argentina
>> *Asunto:* Re: [pyar] regexp fun
>>
>>
>>
>> 2017-04-03 19:01 GMT-03:00 Marcos Dione <mdione en grulic.org.ar>:
>>
>>
>>     buenas, gente, les vengo a traer un puzzle. tengo cosas de la pinta:
>>
>> foo
>> foo[bar]
>> foo[bar][baz]
>> foo[bar][baz][quux]
>>
>>     si? y quiero obtener la secuencia de foo, bar, baz, o sea, la primer
>> palabra y la secuencia de 'claves' (como si estuviera accediendo
>> diccionarios). okei, regexp al rescat... mentira, me menda a pique:
>>
>> In [7]: import re
>>
>> In [10]: foo = re.compile('([a-z]+)(?:\[([a-z]+)\])*')
>>
>> In [11]: foo.match('foo').groups()
>> Out[11]: ('foo', None)
>>
>> In [12]: foo.match('foo[]').groups()
>> Out[12]: ('foo', None)
>>
>> In [13]: foo.match('foo[bar]').groups()
>> Out[13]: ('foo', 'bar')
>>
>> In [14]: foo.match('foo[bar][]').groups()
>> Out[14]: ('foo', 'bar')
>>
>> In [15]: foo.match('foo[bar][baz]').groups()
>> Out[15]: ('foo', 'baz')  # WHAT? ántá mi bar?
>>
>> In [16]: foo.match('foo[bar][baz][quux]').groups()
>> Out[16]: ('foo', 'quux')  # WHAAAAAAAAAAAAT?!?!?
>>
>>     explico la regexp:
>>
>> capturar( uno_o_mas(cualquier_de('a-z')) ) + cero_o_mas('[' + capturar(
>> uno_o_mas(cualquiera-de('a-z')) ) + ']')
>>
>>     espero que se entienda, porque estoy haciendo un modulito que
>> implementa justo eso (pero en inglés):
>>
>> https://github.com/StyXman/dinant
>>
>>     se aceptan sugerencias, ideas, etc. ojo, muy probable termine
>> implemnetando un parser con otra cosa, pero WTF!!!
>>
>>
>>
>> El módulo re de la stdlib sólo te mantiene la última captura de un grupo
>> de captura repetido. Es parte de la forma en la que funciona el motor de
>> regex subyacente.
>>
>>
>>
>> Para evitar ese problema, vas a tener que utilizar otra forma de captura.
>> Por ejemplo, separar la regex en dos y después usar findall para capturar
>> todos los posibles subdiccionarios o, directamente, utilizar el módulo
>> regex que sí permite lo que estás queriendo hacer.
>>
>>
>>
>> Ejemplo: http://stackoverflow.com/a/9765390/1352026
>>
>>
>>
>> Saludos,
>> Toote
>>
>>
>> ------------------------------
>> [image: Avast logo] <https://www.avast.com/antivirus>
>>
>> El software de antivirus Avast ha analizado este correo electrónico en
>> busca de virus.
>> www.avast.com <https://www.avast.com/antivirus>
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20170404/3baa9883/attachment.html>


Más información sobre la lista de distribución pyar