El día 2 de abril de 2013 00:30, Javier Alonso <javieralonso...@gmail.com> escribió: > Saludos a todos, > > Me llamo Javier, trabajo como administrador de sistemas y estoy aprendiendo > python por el gran juego que puede dar en este área. > > Ahora mismo estoy desarrollando una herramienta que me permita trabajar > fácilmente con ficheros de zonas de Bind, pero estoy teniendo problemas con > el módulo re. > > Tengo la siguiente cadena: > > > @ IN SOA ns1.nameserverprimario.com. admin.dominio.com. ( > 2013022101 ; serial, todays date + todays > serial # > 7200 ; refresh, seconds > 540 ; retry, seconds > 604800 ; expire, seconds > 86400 ) ; minimum, seconds > > Aunque podría ser la siguiente también: > > @ IN SOA ns1.nameserverprimario.com. admin.dominio.com. ( > 2013022101 7200 540 604800 86400 ) > > Estoy intentando crear un método que le pases la cadena, y devuelva un > diccionario del estilo: > > Zona : @ > Tipo : SOA > Servidor primario: ns1.nameserverprimario.com. > Correo: admin.dominio.com. > Serial: 2013022101 > Refresh: 7200 > Retry: 540 > Expire: 7200 > TTL: 86400 > > Estoy atascado con las regexp. De momento quiero separar cada elemento de la > siguiente cadena "@ IN SOA ns1.nameserverprimario.com. > 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 ns1.nameserverprimario.com. admin.dominio.com.') > print(grupos.group())
Suponiendo que los distintos elementos aparecen siempre en la misma posición, es bastante sencillo extraer la información por métodos más directos usando el .split(). Con 're' en realidad es bastante sencillo. Podemos usar dos patrones: #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) Lo he puesto en VERBOSE para que se vea mejor la separación entre campos. Su uso: cadena_limpia=comments.sub("", cadena) print pat_SOA.groupdict(cadena_limpia) Que sacaría un diccionario así: {'Correo': 'admin.dominio.com.', 'Expire': '604800', 'Refresh': '7200', 'Retry': '540', 'Serial': '2013022101', 'Servidor_primario': 'ns1.nameserverprimario.com.', 'TTL': '86400', 'Tipo': 'SOA', 'Zona': '@'} -- Hyperreals *R: http://ch3m4.org/blog Quarks, bits y otras criaturas infinitesimales _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/