<div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Pero voy a echar un vistazo a "greedy".</blockquote><div><br></div><div>No tiene mucha ciencia. Cuando aplicamos una expresión regular se nos presenta una duda. ¿Debería buscarse <b>la máxima extensión de texto que cumpla con ella, o sólo la mínima</b>? La primera opción es la "codiciosa" y es la que se aplica si no indicas lo contrario.<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 17, 2020 at 4:36 AM Jose Caballero <<a href="mailto:jcaballero.hep@gmail.com">jcaballero.hep@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">no parece:<br>
<br>
>>> p = re.compile("^(?P<type>(.*)):? (?P<value>([^:]*))$")<br>
>>><br>
>>> l = "type: word: foo bar"<br>
>>><br>
>>> m = p.match(l)<br>
>>> print m.groupdict()<br>
{'type': 'type: word: foo', 'value': 'bar'}<br>
>>><br>
<br>
Pero voy a echar un vistazo a "greedy".<br>
Muchas gracias.<br>
<br>
Jose<br>
<br>
El lun., 17 ago. 2020 a las 15:25, Ander Garmendia<br>
(<<a href="mailto:kelertxiki@gmail.com" target="_blank">kelertxiki@gmail.com</a>>) escribió:<br>
><br>
> Hola,<br>
><br>
> 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:<br>
><br>
>  pattern = re.compile("^(?P<type>(.*)):? (?P<value>([^:]*))$")<br>
><br>
> Si buscas "greedy" en el apartado de la librería "re" en la documentacion oficial, lo explican mucho mejor.<br>
><br>
> Un saludo.<br>
><br>
> Jose Caballero <<a href="mailto:jcaballero.hep@gmail.com" target="_blank">jcaballero.hep@gmail.com</a>> igorleak hau idatzi zuen (2020 abu. 17, al. 15:45):<br>
>><br>
>> Hola,<br>
>><br>
>> tengo una serie de lineas, todas con el mismo formato:<br>
>><br>
>>     <type>: <value><br>
>><br>
>> donde <type> es una sola palabra, y <value> es una frase.<br>
>> Intentaba "parsearlas" con algo como esto:<br>
>><br>
>>     pattern = re.compile("^(?P<type>(.*)): (?P<value>(.*))$")<br>
>>     parse = pattern.match(line)<br>
>>     groups = parse.groupdict()<br>
>>     print( groups["type"] )<br>
>>     print( groups["value"] )<br>
>><br>
>> Funciona bien, salvo que <value> incluya el signo de los dos puntos.<br>
>> Por ejemplo, para<br>
>><br>
>>          one: two: three four<br>
>><br>
>> Me devuelve type = "one: two" y value "three four", en lugar de "one"<br>
>> y "two: three four" respectivamente.<br>
>><br>
>> ?Como arreglo ese pattern para que el primer "lookahead" pare en el primer ":"?<br>
>> [Creo que se nota que tengo poca experiencia con regex]<br>
>><br>
>> Muchas gracias.<br>
>> Un saludo,<br>
>> Jose<br>
>> _______________________________________________<br>
>> Python-es mailing list<br>
>> <a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
>> <a href="https://mail.python.org/mailman/listinfo/python-es" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
><br>
> _______________________________________________<br>
> Python-es mailing list<br>
> <a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
> <a href="https://mail.python.org/mailman/listinfo/python-es" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
</blockquote></div>