[Python-es] problema con "regular expression"

Ander Garmendia kelertxiki en gmail.com
Lun Ago 17 11:05:17 EDT 2020


Exacto, gracias por la corrección.

Alexis Roda <alexis.roda.villalonga en 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 <kelertxiki en 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.hep en 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
>>> (<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
>>> _______________________________________________
>>> 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
>>
> _______________________________________________
> 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/467427fb/attachment.html>


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