[Python-es] Presentación y duda con módulo re

Javier Alonso javieralonsogil en gmail.com
Mar Abr 2 22:33:26 CEST 2013


Hola a todos,

Disculpad, hasta ahora no he podido responder. Al final revisando la
documentación, dí con lo que comentó Alexis.

El código queda así :

#para detectar comentarios
comments=re.compile(";.*")

#Encuentra los espacios en blanco y vacíos
espacios=re.compile("\s+")

#Encuentra el primer espacio en blanco
espacios2=re.compile("^\s")

#Limpia comentarios
cadena_limpia=comments.sub("", cadena)

#Sistituye todos los espacios (Retornos de carro, tabs y espacios) por
un solo espacio, con lo que nos queda todo en una línea
cadena_limpia=espacios.sub(" ", cadena_limpia)
#Debido a la operación anterior, nos deja al principio un espacio que
nos dá problemas
cadena_limpia=espacios2.sub("", cadena_limpia)

#para extraer los campos
#Me ha dado problemas la expresión en multilinea. Lo he dejado así
pat_SOA = re.match(r"(?P<Zona>@)\W+IN\W+(?P<Tipo>SOA)\W+(?P<Servidor_primario>[\w\.]+\.)\W+(?P<Correo>[\w\.]+\.)\W+\(\W+(?P<Serial>\d+)\W+(?P<Refresh>\d+)\W+(?P<Retry>\d+)\W+(?P<Expire>\d+)\W+(?P<TTL>\d+)\W+\)",cadena_limpia)
print(pat_SOA.groupdict())

Gracias por todo. Creo que el tema de los espacios no lo he manejado
de manera muy elegante, pero funciona :)
Tendré que seguir trabajando con re, pero creo que lo voy pillando.

Un saludo,
Javier Alonso


El día 2 de abril de 2013 12:34, Alexis Roda Villalonga
<alexis.roda.villalonga en gmail.com> escribió:
> patSOA es un patrón compilado y no define groupdict. Tienes que hacer algo
> como:
>
> resultado = patSOA.match(cadena)
> d = resultado.groupdict()
> print d["Tipo"]
>
>
> Saludos
>
>
> 2013/4/2 Javier Alonso <javieralonsogil en gmail.com>
>>
>> Muchas gracias a todos,
>>
>> Gracias por la recomendación de split. En este caso no me sirve, pero
>> ya se me ha ocurrido alguna situación en la que lo necesitaré.
>> El código de Chema me viene perfecto, pero me está dando el siguiente
>> fallo:
>>
>> Traceback (most recent call last):
>>   File "pruebalista.py", line 36, in <module>
>>     print (pat_SOA.groupdict(cadena_limpia))
>> AttributeError: '_sre.SRE_Pattern' object has no attribute 'groupdict'
>>
>> He probado tanto con python3 como con python2.7.
>>
>> Al final buscando un poco he visto un método que devuelve una lista.
>>
>> #para detectar comentarios
>> comments=re.compile(";.*")
>> #para extraer los campos
>> pat_SOA = re.compile("""
>>     (?P<Zona>@)\W+
>>     IN\W+
>>     (?P<Tipo>SOA)\W+
>>     (?P<Servidor_primario>[\w\.]+\.)\W+
>>     (?P<Correo>[\w\.]+\.)\W+
>>     \(\W+
>>         (?P<Serial>\d+)\W+
>>         (?P<Refresh>\d+)\W+
>>         (?P<Retry>\d+)\W+
>>         (?P<Expire>\d+)\W+
>>         (?P<TTL>\d+)\W+
>>     \)
>> """,re.VERBOSE)
>> #print (pat_SOA)
>> cadena_limpia=comments.sub("", cadena)
>> #print (cadena_limpia)
>> #pat_SOA.groupdict(cadena_limpia)
>> print(pat_SOA.findall(cadena_limpia))
>>
>> Es el mismo ejemplo solo que con findall. Me viene bastante mejor que
>> me devuelva un diccionario, pero una lista no está mal ; ).
>> Si alguien puede dar con el error del groupdict perfecto.
>>
>> Para Alexis, tienes razón en las listas no se debe usar html, ;) en el
>> mensaje lo escribí sin "http://" .
>>
>> Un saludo,
>> Javier Alonso
>>
>> El día 2 de abril de 2013 03:30, Alexis Roda
>> <alexis.roda.villalonga en gmail.com> escribió:
>> > Al 02/04/13 00:30, En/na Javier Alonso ha escrit:
>> >>
>> >> Estoy atascado con las regexp. De momento quiero separar cada elemento
>> >> de la siguiente cadena "@       IN      SOA ns1.nameserverprimario.com
>> >> <http://ns1.nameserverprimario.com>. admin.dominio.com
>> >> <http://admin.dominio.com>."
>> >>
>> >>
>> >> grupos =
>> >>
>> >>
>> >> re.match('^([@]|[a-zA-z0-9\.]*\.)(\s+)IN(\s+)SOA(\s+)([@]|[a-zA-z0-9\.]*\.)(\s+)([@]|[a-zA-z0-9\.]*\.)','@
>> >>        IN      SOA http://ns1.nameserverprimario.com.
>> >> admin.dominio.com.')
>> >> print(grupos.group())
>> >
>> >
>> > ([@]|[a-zA-z0-9\.]*\.) no encaja con http://ns1.nameserverprimario.com.
>> >
>> > Me ha costado verlo. El thunderbird ha convertido la URL en un enlace y
>> > claro, al copiar/pegar en el interprete no se incluía el http:// y
>> > funcionaba. Mejor envía mensajes con texto plano.
>> >
>> >
>> >
>> > Saludos
>> >
>> >
>> > _______________________________________________
>> > Python-es mailing list
>> > Python-es en python.org
>> > http://mail.python.org/mailman/listinfo/python-es
>> > FAQ: http://python-es-faq.wikidot.com/
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>


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