Étant donné que votre texte semble avoir numérique-codé, non nommé, les entités, vous pouvez d'abord convertir votre chaîne d'octets qui inclut l'entité xml defs (esperluette, hachage, chiffres, virgule) à 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)
si votre émulateur de terminal peut afficher glyphes unicode arbitraires, un print u
montrera alors
ã, ن, ش
Dans tous les cas, vous pouvez maintenant, Si vous le souhaitez, utilisez votre RE d'origine et vous ne pas "attraper" accidentellement les entités, seulement les lettres ascii, les chiffres, et le couple de caractères de ponctuation que vous avez énumérés. (Je ne suis pas sûr que ce soit ce que vous voulez vraiment - pourquoi pas des lettres accentuées, mais seulement des lettres ascii, par exemple?), Mais si est ce que vous voulez, cela fonctionnera).
Si vous faites ont nommé des entités en plus de ceux numériques codés, vous pouvez également appliquer le module de bibliothèque standard htmlentitydefs
recommandé dans une autre réponse (il ne traite que des entités nommées qui carte au code Latin-1 points, cependant).
Vous pouvez avoir remplacé le préfixe et avec & –
Pouvez-vous montrer l'expression rationnelle avec un certain contexte? Votre exemple ci-dessus correspond juste à n'importe quel caractère qui n'est pas un de ces caractères. Est-ce que cela fait partie d'une plus grande expression? Remplacez-vous les caractères? –
J'ai formaté votre texte sous forme de code pour qu'il ne soit plus aussi gros ;-). –