您将无法以这种方式识别正确解码的 unicode 代码点(如包含 \uXXXX 等的字符串)。正确解码后,当正则表达式解析器获取它们时,每个都是 * 字符。
根据您的 python 是否仅使用 16 位 unicode 代码点编译,您将需要类似以下的模式:
# 16-bit codepoints
re_strip = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
# 32-bit* codepoints
re_strip = re.compile(u'[\U00010000-\U0010FFFF]')
您的代码如下所示:
import re
# Pick a pattern, adjust as necessary
#re_strip = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
re_strip = re.compile(u'[\U00010000-\U0010FFFF]')
content= u'[\u86cb\u767d12\U0001f633\uff0c\u4f53\u6e29\u65e9\u6668\u6b63\u5e38\uff0c\u5348\u540e\u665a\u95f4\u53d1\u70ed\uff0c\u6211\u73b0\u5728\u8be5\u548b\U0001f633]'
print(content)
stripped = re_strip.sub('', content)
print(stripped)
两个表达式,将stripped字符串中的字符数减少到26个。
这些表情会去除你想要的表情符号,但也可能会去除你做想要的其他东西。可能值得查看 unicode 代码点范围列表(例如 here)并调整它们。
您可以通过执行以下操作来确定您的 python 安装是否只能识别 16 位代码点:
import sys
print(sys.maxunicode.bit_length())
如果显示为 16,您将需要第一个正则表达式。如果它显示大于 16(对我来说是 21),那么第二个就是你想要的。
在带有错误sys.maxunicode 的python 安装上使用时,这两个表达式都不起作用。
另请参阅:this 相关。