[Python-es] Expresiones regulares

Andres Marin aymg01 en gmail.com
Mar Jun 3 12:28:34 CEST 2014


Hola,

Puedes hacer primero un split por la cadena "},{" eso te devolverá una
lista iterable a la que puede, linea por linea, ir buscando la expresión \
"name\":"([\z\d]+)\".*\"value\"\:\"([\z\d]+)".

Quizas debas hacer algunos ajustes, pero creo que te funcionara. Por otra
parte, quien te manda los datos, aparentemente es un sistema "juicioso" que
manda los datos en formato JSON, puedes hacer una regex que te valide eso y
de paso lo elimine: al principio: {"format":"JSON","result": y al
final: ,"version":"1.0"
el resultado aparente es una cadena con notacion de JSON la cual con la
libreria de python la puedes parsear sin problemas y obtener todo lo que
necesitas, sin que uses la regex exacta.

Saludos y espero te sirva.


On Tue, Jun 3, 2014 at 4:22 AM, Miguel Angel Rodriguez <marodal en gmail.com>
wrote:

>
> Hola a todos,
>
> Estoy intentando parsear con Python una gran cadena que recibo en un
> software de comunicaciones que estoy programando.
>
> La cadena que yo recibo es la siguiente:
>
> value_str =
> {"format":"JSON","result":{"devices":[{"key":"SCGDE1BA:180340320","channels":[{"name":"PF","unit":"","meta":"PF","value":"1.000"},{"name":"P-WSpt","unit":"kW","meta":"P-WSpt","value":"935"},
>
> {"name":"Vac","unit":"V","meta":"Vac","value":"217.5"},{"name":"Iac","unit":"A","meta":"Iac","value":"513.8"},{"name":"Pac","unit":"kW","meta":"Pac","value":"335.2"},{"name":"Qac","unit":"kV
>
> Ar","meta":"Qac","value":"-1.0"},{"name":"Sac","unit":"kVA","meta":"Sac","value":"335.1"},{"name":"Fac","unit":"Hz","meta":"Fac","value":"49.950"},{"name":"ErrNoFirst","unit":"","meta":"ErrNoFirst","value":"0"},{"
>
> name":"P-WModFailStt","unit":"","meta":"P-WModFailStt","value":"Off"},{"name":"P-WModStt","unit":"","meta":"P-WModStt","value":"Off"},{"name":"Dsc","unit":"","meta":"Dsc","value":"---"},{"name":"Firmware-9","unit":"","meta":"Firmware-9","value":"
> "},{"name":"Cntry","unit":"","meta":"Cntry","value":"DE1"}
> ,{"name":"Type","unit":"","meta":"Type","value":"SCG"},{"name":"Mode","unit":"","meta":"Mode","value":"Operation"},{"name":"Error","unit":"","meta":"Error","value":"---"}]}]},"version":"1.0"
>
>
> Yo solo quiero quedarme con los name y value existente.
>
> LA forma en la que lo estoy intentando es la siguiente:
>
> for channel_str in re.findall("\"name\":\"[A-Za-z0-9\-.
> ]+\",\"value\":\"[A-Za-z0-9\-. ]*\"",value_str):
>             d_value = re.findall("[A-Za-z0-9.\-]+",channel_str)
>
> Pero de esta forma no entra en el for.
>
> ¿Alguien me puede ayudar?
>
> Gracias y un saludo
>
>
>
>
>
>
> --
> Miguel Ángel Rodríguez de Alba
> 678304435
> marodal en gmail.com
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
Andres Marin Gomez
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140603/62942d9f/attachment.html>


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