Dans une version UCS-2, python utilise 2 unités de code en interne pour chaque caractère unicode sur le \U0000ffff
point de code. Les expressions régulières doivent fonctionner avec celles-ci, vous devez donc utiliser l'expression régulière suivante pour les faire correspondre :
highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
Cette expression régulière correspond à n'importe quel point de code encodé avec une paire de substitution UTF-16 (voir Points de code UTF-16 U+10000 à U+10FFFF .
Pour rendre cela compatible avec les versions Python UCS-2 et UCS-4, vous pouvez utiliser un try:
/except
pour utiliser l'un ou l'autre :
try:
highpoints = re.compile(u'[\U00010000-\U0010ffff]')
except re.error:
# UCS-2 build
highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
Démonstration sur une version python UCS-2 :
>>> import re
>>> highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
>>> example = u'Some example text with a sleepy face: \U0001f62a'
>>> highpoints.sub(u'', example)
u'Some example text with a sleepy face: '