Ver la versión completa : Ayuda con python
Estoy programando un plugin en python para el XBMC y tengo un problemilla a la hora de convertir los típicos "acute" que encontramos en un html a texto plano. He encontrado esta sencilla función:
text = re.sub("&([aeiouAEIOU])(grave|acute|circ|tilde|uml|ring);", lambda m: m.groups(1)[0], text)
que funciona muy bien pero tiene la pega de que reemplaza las letras acentuadas por su equivalente sin acentuar.
¿Alguna idea sobre cómo conseguirlo sin demasiadas complicaciones?
Topochan
28/11/2009, 18:27
Estoy programando un plugin en python para el XBMC y tengo un problemilla a la hora de convertir los típicos "acute" que encontramos en un html a texto plano. He encontrado esta sencilla función:
text = re.sub("&([aeiouAEIOU])(grave|acute|circ|tilde|uml|ring);", lambda m: m.groups(1)[0], text)
que funciona muy bien pero tiene la pega de que reemplaza las letras acentuadas por su equivalente sin acentuar.
¿Alguna idea sobre cómo conseguirlo sin demasiadas complicaciones?
tendria que saber que es re(aunque me huelo que es regular expresion), en principio es simple lo que hace el código ( o eso entiendo) :
sub() Find all substrings where the RE matches, and replace them with a different string
es decir el primer parametro es la expresion regular, el segundo es una operacion if lambda , si lo encuentra devuelve la primera letra del conjunto 1(que sera en el caso de Aacuote la "A") y sino el texto en si
para hacer la conversión a tilde puedes hacer una tabla de conversión [aeiouAEIOU] con tildes (es decir lo anterior pero con todas las tildes puesta) y substituirlas por su equivalente del resultado del lambda, es complicado eso si.
Una posibilidad es ir marca por marca:
# -*- coding: utf-8 -*-
#
import re
def trans(text, mark, original, final):
return re.sub("&([%s])%s;"%(original,mark), lambda m: final[original.find(m.groups(1)[0])]
, text)
text = "¡Estó es uña pruebà"
text = trans(text, "acute", "aeiouAEIOU", u"áéíóúÁÉÍÓÚ");
text = trans(text, "grave", "aeiouAEIOU", u"àèìòùÀÈÌÒÙ");
text = trans(text, "tilde", "nN", u"ñÑ");
text = trans(text, "uml", "uU", u"üÜ");
text = trans(text, "excl", "i", u"¡");
print text
Muchas gracias a los dos. El código de juanvvc es lo que buscaba: sencillo y ampliable :)
edito: aquí os dejo una imagen del plugin para el DVBViewer mostrando los datos del EPG con los acentos:
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.