[Python-es] problema con "regular expression"

Ander Garmendia kelertxiki en gmail.com
Lun Ago 17 10:25:31 EDT 2020


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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20200817/a8043340/attachment.html>


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