dst = re.sub(r'&#([0-9]+);', lambda x:unichr(int(x.group(1))), src)

  • re.sub() hace sustituciones guiada por una expresión regular.
  • r'&#([0-9]+);' es una expresión regular que captura lo que buscamos y expone lo que nos interesa, el número
  • lambda x:unichr(int(x.group(1))) es la función (anónima en este caso) que decide por que se reemplaza, por el caracter UTF con el código en cuestión.
  • src la cadena original

ps: corregido para evitar capturar &#;