Znaky Unicode v rozsahu \u0000-\uD7FF a \uE000-\uFFFF budou mít 3bajtové (nebo méně) kódování v UTF8. Rozsah \uD800-\uFFFF je pro vícebajtové UTF16. Python neznám, ale měli byste být schopni nastavit regulární výraz tak, aby odpovídal mimo tyto rozsahy.
pattern = re.compile("[\uD800-\uDFFF].", re.UNICODE)
pattern = re.compile("[^\u0000-\uFFFF]", re.UNICODE)
Upravte přidání Pythonu ze skriptu Denilsona Sá v těle otázky:
re_pattern = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE)
filtered_string = re_pattern.sub(u'\uFFFD', unicode_string)