El vie, 12-03-2010 a las 12:32 +0100, Oswaldo Hernández escribió:
> Arnau Sanchez escribió:
> > On 12/03/10 11:54, Oswaldo Hernández wrote:
> > 
> >> "dbname=bd user = usuario host= 192.168.22.5"
> >>
> >> Quiero convertirla a diccionario de forma que quede:
> >> {"dbname":"bd", "user":"usuario", "host":"192.168.22.5"}
> >>
> >> Lo estoy haciendo de una forma bastante burda: elimino espacios a los
> >> lados del signo '=', luego separo los pares con split, ...
> > 
> > A falta de ver el código, yo diría que es lo suficientemente pythonica.
> > 
> >> Me gustaría hacerlo de una forma mas pythonica. Estoy intentando hacerlo
> >> con expresiones regulares pero me temo que regex no es mi fuerte
> > 
> > Yo empezaría a jugar con algo así:
> > 
> > dict(re.findall("(\S+)\s*=\s*(\S+)", s))
> 
> Funciona perfectamente!!!, Magia!!!, algún dia me tendrás que explicar 
> que significa :)

dict(re.findall("(\S+)\s*=\s*(\S+)", s))

findall te da una lista con todo lo que cumpla una expresión entre
parentesis.

\s "matchea" con todo lo que sea un espacio (pilla espacios,
tabuladores, etc)
\S "matchea" con todo lo que no sea un espacio

con el + se está indicando que tiene que haber uno o más. Con el * se
indica que puede haber cero o más.

Si combinamos todo esto, tenemos que las "claves" van a cumplir la
primera expresión \S+ que está entre paréntesis y los valores van a
cumplir la segunda expresión \S+.

No se si lo he explicado bien. Las expresiones regulares son una
herramienta muy potente.

Attachment: signature.asc
Description: Esto es una parte de mensaje firmado digitalmente

_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a