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....@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@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