Otra solución es utilizar expresiones más precisas/restrictivas/específicas.

Para capturar type, dependiendo de los detalles concretos, puedes utilizar
alguna de las expresiones "[^:]*", "[a-zA-Z]*" o "\w*" en lugar de ".*"


Missatge de Jose Caballero <jcaballero....@gmail.com> del dia dl., 17 d’ag.
2020 a les 15:44:

> 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@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a