In einem UCS-2-Build verwendet Python intern 2 Codeeinheiten für jedes Unicode-Zeichen über dem \U0000ffff
Codepunkt. Reguläre Ausdrücke müssen mit diesen funktionieren, also müssten Sie den folgenden regulären Ausdruck verwenden, um diese abzugleichen:
highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
Dieser reguläre Ausdruck stimmt mit jedem Codepunkt überein, der mit einem UTF-16-Ersatzpaar codiert ist (siehe UTF-16-Code zeigt U+10000 bis U+10FFFF .
Um dies mit den Python UCS-2- und UCS-4-Versionen kompatibel zu machen, könnten Sie einen try:
verwenden /except
um das eine oder andere zu verwenden:
try:
highpoints = re.compile(u'[\U00010000-\U0010ffff]')
except re.error:
# UCS-2 build
highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
Demonstration auf einem UCS-2-Python-Build:
>>> 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: '