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 <pych...@gmail.com> escribió:

> El 3 de junio de 2014, 11:56, Miguel Angel Rodriguez <maro...@gmail.com>
> 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 <nada...@gmail.com>
>> 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 <
>>> maro...@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
>>>> maro...@gmail.com
>>>>
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es@python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>>
>> --
>> Miguel Ángel Rodríguez de Alba
>> 678304435
>> maro...@gmail.com
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es@python.org
>> 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
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
Miguel Ángel Rodríguez de Alba
678304435
maro...@gmail.com
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a