Muchisimas gracias por vuestras aportaciones.
Al final lo he solucionado un poco a la fuerza bruta.
for channel_str in re.findall("\"name\":\"[A-Za-z0-9\-.
]+\",\"unit\":\"[A-Za-z0-9\-. ]+\",\"meta\":\"[A-Za-z0-9\-.
]+\",\"value\":\"[A-Za-z0-9\-. ]*\"",value_str):
d_value = re.findall("[A-Za-z0-9.\-]+",channel_str)
.......
En cada iteración, en d_value tengo un array de esta forma: [name,(valor
del name),unit,(valor del unit),meta,(valor del meta),value,(valor del
value)]. Solo tengo que acceder a esta array con los indices que me
interesen para obtener lo que deseo.
Se que no es la forma más optima, pero funciona perfectamente.
Muchisimas gracias por todas vuestras aportaciones, sin duda este es el
mejor grupo de programadores que existe.
Saludos
El 3 de junio de 2014, 12:38, Chema Cortes <[email protected]> escribió:
> El 3 de junio de 2014, 11:56, Miguel Angel Rodriguez <[email protected]>
> escribió:
>
> En principio necesito hacerlo con expresiones regulares. ¿Lo veis muy
>> complicado?
>>
>> No es que sea complicado, sólo buscamos cómo trabajar menos, como los
> buenos informáticos.
>
>
>> ¿No creeis que casi está con la expresion regular que indiqué en mi
>> primer correo?
>>
>>
> Lo que veo de la expresión es que buscas "name" seguido inmediatamente de
> "value", cosa que no ocurre.
>
> Prueba a separar los campos con algo así: '''"name":"(?P<name>[\w\d\-.
> ]+)".*?,"value":"(?P<value>[\w\d\-. ]*)"'''
>
>
>
>>
>>
>>
>> El 3 de junio de 2014, 11:52, Guillermo Vaya <[email protected]>
>> escribió:
>>
>> Si es un json (como indica el ejemplo que pones) ¿por qué no usas alguna
>>> de las librerias de json para que lo parsee?
>>>
>>> A partir de ahi solo tienes que recorrerlo como una estructura de datos
>>> y coger aquello que quieras sin los lios inherentes a hacer tus propias
>>> expresiones regulares.
>>>
>>>
>>> On Tue, Jun 3, 2014 at 11:22 AM, Miguel Angel Rodriguez <
>>> [email protected]> 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
>>>> [email protected]
>>>>
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> [email protected]
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> [email protected]
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>>
>> --
>> Miguel Ángel Rodríguez de Alba
>> 678304435
>> [email protected]
>>
>> _______________________________________________
>> Python-es mailing list
>> [email protected]
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
>
> --
> Hyperreals *R "Quarks, bits y otras criaturas infinitesimales":
> http://ch3m4.org/blog
> Buscador Python Hispano: http://ch3m4.org/python-es
>
> _______________________________________________
> Python-es mailing list
> [email protected]
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
--
Miguel Ángel Rodríguez de Alba
678304435
[email protected]
_______________________________________________
Python-es mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/