[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