El día 5 de junio de 2012 15:59, Rock Neurotiko <miguelglafue...@gmail.com> escribió: > Yo creo que no hay que darle muchas vueltas al tema, puede que escrito quede > más "bonito", pero la expresion regular, dentro de lo que cabe, seguirá > recorriendo todo el string, incluso lo tendras que recorrer mas veces, una > por cada substitución. > Van a ser de la misma complejidad, O(n), o incluso la de expresiones > regulares seria O(k*n).
No estoy de acuerdo. Muchas librerías, como la de las expresiones regulares, se programan y optimizan en C con lo que su uso puede resultar muy eficiente. Pero en el caso concreto de las expresiones regulares, se pueden combinar todos los caracteres a buscar en una sóla cadena de búsqueda con lo que sólo recorrer la cadena una sóla vez: import re from htmlentitydefs import codepoint2name u2n=dict((unichr(k),v) for (k,v) in codepoint2name.items()) pat=re.compile('['+"".join(u2n.keys())+']') def repl(m): return '&'+u2n[m.group(0)]+';' print( pat.sub(repl, u"áÁ éÉ íÍ óÓ úÚ ñÑ çÇ €") ) Este uso muestra muy poco del potencial que tienen las expresiones regulares. Para el caso que nos ocupa, posiblemente existan otras soluciones más rápidas y elegantes de hacer lo mismo, o incluso tan crípticas como ésta: print( "".join( ('&'+u2n[c]+';') if ord(c) in u2n else c for c in u""áÁ éÉ íÍ óÓ úÚ ñÑ çÇ €") ) ...que viene a ser una solución "compacta" de las ya propuestas en mensajes anteriores. -- 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/