[Python-es] problema con "regular expression"

Jose Caballero jcaballero.hep en gmail.com
Lun Ago 17 10:35:44 EDT 2020


no parece:

>>> p = re.compile("^(?P<type>(.*)):? (?P<value>([^:]*))$")
>>>
>>> l = "type: word: foo bar"
>>>
>>> m = p.match(l)
>>> print m.groupdict()
{'type': 'type: word: foo', 'value': 'bar'}
>>>

Pero voy a echar un vistazo a "greedy".
Muchas gracias.

Jose

El lun., 17 ago. 2020 a las 15:25, Ander Garmendia
(<kelertxiki en gmail.com>) escribió:
>
> Hola,
>
> Las expresiones tipo(. *) son "greedy", esto es se expanden "a todo lo que pillen". Si quieres limitar el match al primer grupo, añade un ? al carácter de corte:
>
>  pattern = re.compile("^(?P<type>(.*)):? (?P<value>([^:]*))$")
>
> Si buscas "greedy" en el apartado de la librería "re" en la documentacion oficial, lo explican mucho mejor.
>
> Un saludo.
>
> Jose Caballero <jcaballero.hep en gmail.com> igorleak hau idatzi zuen (2020 abu. 17, al. 15:45):
>>
>> Hola,
>>
>> tengo una serie de lineas, todas con el mismo formato:
>>
>>     <type>: <value>
>>
>> donde <type> es una sola palabra, y <value> es una frase.
>> Intentaba "parsearlas" con algo como esto:
>>
>>     pattern = re.compile("^(?P<type>(.*)): (?P<value>(.*))$")
>>     parse = pattern.match(line)
>>     groups = parse.groupdict()
>>     print( groups["type"] )
>>     print( groups["value"] )
>>
>> Funciona bien, salvo que <value> incluya el signo de los dos puntos.
>> Por ejemplo, para
>>
>>          one: two: three four
>>
>> Me devuelve type = "one: two" y value "three four", en lugar de "one"
>> y "two: three four" respectivamente.
>>
>> ?Como arreglo ese pattern para que el primer "lookahead" pare en el primer ":"?
>> [Creo que se nota que tengo poca experiencia con regex]
>>
>> Muchas gracias.
>> Un saludo,
>> Jose
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es


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