Página 1 de 1

Expresiones regulares más legibles

Publicado: 17 Mar 2010, 14:26
por jurrabi
Ya que tenemos este foro de desarrollo tan bonito creo que sería buena idea usarlo también para compartir ideas, trucos y experiencias con el desarrollo de plugins en general y el de pelisalacarta en particular.

Pues bien, voy a empezar yo mismo con algo que seguro que todos sabéis. Pero por si no...

Como novato absoluto que soy por estas lindes (novato con python, novato con scripts xbmc, novato con plugins...) empleo la mitad del tiempo analizando el código de otros y la otra mitad leyendo manuales y wikis. Pues bien, leyendo uno de esos manuales descubrí una interesante opción de las expresiones regulares:

Resulta que se puede activar una opción "Verbose" que ignora los espacios en las expresiones regulares que creemos. También trata el caracter '#' como un comentario de línea dentro de la propia expresión regular. Esto permite crear expresiones regulares más legibles y más fáciles de mantener.

Con esta opción podemos convertir esto:

Código: Seleccionar todo

  patronvideos = '''<li><a href="([^"]+)">([^<]+)(?:\ <font class="new-new">(New)!</font>)?(?: <font class="new-updated">(Updated)!</font>)?<span style="margin-top:0px;">([0-9]+) episodes'''

en esto:

Código: Seleccionar todo

  patronvideos = '''(?x)                                #      Activa opción VERBOSE.
    <li><a\ href="                                      #      Basura
    ([^"]+)">                                           # $0 = Path (relativo) de la serie Ej. "/tv/The_Wire/"
    ([^<]+)                                             # $1 = Nombre de la serie Ej. Wire, The
    (?:\ <font\ class="new-new">(New)!</font>)?         # $2 = 'New' si la serie es nueva.
    (?:\ <font\ class="new-updated">(Updated)!</font>)? # $3 = 'Updated' si la serie ha sido actualizada
    <span\ style="margin-top:0px;">                     #      Basura
    ([0-9]+)\ episodes                                  # $4 = Número de episodios Ej. 59
                 ''' 
Como podéis observar en el código cuando es necesario matchear un espacio o un '#' basta con precederlo con la típica barra invertida ('\').

Para activar la opción hay 2 opciones
- La opción re.VERBOSE (o reducido a re.X)
- Incluir el código (?x) al inicio del patrón (mi opción favorita ya que puedo documentarlo en el propio patrón).

Creo que sobran las palabras a la hora de elegir que opción hace el código más legible y mantenible.

Yo lo he usado en el canal de TVShack y la verdad es que he notado la diferencia...

Re: Expresiones regulares más legibles

Publicado: 20 Mar 2010, 10:20
por jesus
Interesante...

A mí las expresiones regulares siempre se me dieron mal, pero como he tenido que practicar mucho últimamente he descubierto lo útiles que son :)

Re: Expresiones regulares más legibles

Publicado: 22 Abr 2010, 12:14
por rocko
Excelente! Gracias por la aportacion, definitivamente es mas facil esta estrategia ya que esto es la parte mas critica de los scrappers de html.

Saludos,

Rocko.

Re: Expresiones regulares más legibles

Publicado: 24 Abr 2010, 14:04
por xezpeleta
Muy interesante! Y, sobretodo, muy buen ejemplo para aprender expresiones regulares en 30 segundos!!!