[pyar] regexp fun

Marcos Dione mdione en grulic.org.ar
Lun Abr 3 19:01:13 ART 2017


    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!!!

-- 
(Not so) Random fortune:
Terrorism isn't a crime against people or property. It's a crime against
our minds, using the death of innocents and destruction of property to
make us fearful.
	    -- Bruce Schneier


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