Учитывая, что ваш текст содержит числовые, а не именованные сущности, вы можете сначала преобразовать вашу байтовую строку, содержащую определения сущностей xml (амперсанд, хэш, цифры, точки с запятой) в Unicode:
import re
xed_re = re.compile(r'&#(\d+);')
def usub(m): return unichr(int(m.group(1)))
s = 'ã, ن, ش'
u = xed_re.sub(usub, s)
если ваш эмулятор терминала может отображать произвольные символы Юникода, тогда print u
покажет
ã, ن, ش
В любом случае, теперь вы можете, если хотите, использовать свой оригинальный RE, и вы не будете случайно «ловить» объекты, только буквы, цифры и пару знаков препинания, которые вы перечислили. (Я не уверен, что это то, что вы действительно хотите - почему бы не буквы с акцентом, а только буквы ascii, например? - но, если это равно , что вы хотите, это будет работать).
Если у вас до есть именованные объекты в дополнение к числовым кодам, вы можете также применить стандартный библиотечный модуль htmlentitydefs
, рекомендованный в другом ответе (он касается только однако именованные объекты, которые отображаются на кодовые точки Latin-1).