[Python-es] Expresiones regulares por grupo

Chema Cortes pych3m4 en gmail.com
Vie Feb 11 19:00:01 CET 2011


En Thu, 10 Feb 2011 14:42:36 +0100, lopz <lowlifebob en gmail.com> escribió:

> El día 10 de febrero de 2011 04:50, Chema Cortes <pych3m4 en gmail.com>  
> escribió:

>> Si sabes que los tres patrones de búsqueda van a ir en ése orden, se
>> podrían encadenar:
>>
>> pat1="""q=(.*?)[&"]"""
>> pat2="(\d{4}-\d{2}-\d{2})"
>> pat3="""<p class="text">(.*?)</p>"""
>>
>> pat=re.compile(".*?".join((pat1,pat2,pat3)), re.DOTALL)
>>
>> Dos comentarios:
>>
>> 1) activa el flag dotall para búsquedas multilíneas
>> 2) te sobraba el carácter | en el primer patrón (por lo que comentabas)
>
> Sí, gracias por el tip, lo del caracterr | lo puse por or pero ahora
> que veo no es necesario jeje
> Peero sigo con la duda de que cómo sería en una sola expresión?
> cómo le digo que me coja desde q= hasta </p> y lo que está en medio
> agrupar partes por grupos?
> ¿o es que esto no se puede?

Te había respondido a tu pregunta: si juntas los tres grupos con .*?  
tendrás todo en una sóla expresión:

"""(?s)q=(.*?)[&"].*?(\d{4}-\d{2}-\d{2}).*?<p class="text">(.*?)</p>"""

Pero te en cuenta que algún día tú u otro programador querrá modificar  
este código, así que ponlo lo más fácil posible.

Por otro lado, tú mismo estás viendo que es mejor primero buscar un  
fragmento y luego trocearlo en grupos. Tal vez deberías hacer caso a tu  
instinto.


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