Exacto, gracias por la corrección. Alexis Roda <alexis.roda.villalo...@gmail.com> igorleak hau idatzi zuen (2020 abu. 17, al. 17:01):
> El ? va junto al * que queremos que no sea codicioso: > > pattern = re.compile("^(?P<type>(.*?)): (?P<value>(.*))$") > > Ponerlo junto al : hace que ese carácter sea opcional. > > In [20]: p = re.compile("^(?P<type>(.*)):? (?P<value>(.*))$") > > In [21]: l = "hola mundo" > > In [22]: m = p.match(l) > > In [23]: m.groupdict() > Out[23]: {'type': 'hola', 'value': 'mundo'} > > > > > Missatge de Ander Garmendia <kelertx...@gmail.com> del dia dl., 17 d’ag. > 2020 a les 16:43: > >> Uuups, te he pegado una expresión que está mal. La correcta es esta: >> >> pattern = re.compile("^(?P<type>(.*)):? (?P<value>(.*))$") >> >> Perdona las molestias. >> >> Jose Caballero <jcaballero....@gmail.com> igorleak hau idatzi zuen (2020 >> abu. 17, al. 16:37): >> >>> 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 >>> (<kelertx...@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....@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 >>> _______________________________________________ >>> 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 >> > _______________________________________________ > 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