我想用''
替换所有表情符号,但我的regEx不起作用。
例如,
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?'
我希望用\U0001f633
替换''
等所有表单,以便编写代码:
print re.sub(ur'\\U[0-9a-fA-F]{8}','',content)
但它不起作用。
非常感谢。
答案 0 :(得分:3)
您将无法以这种方式识别正确解码的unicode代码点(作为包含\uXXXX
的字符串等)正确解码,到正则表达式解析器到达它们时,每个都是*字符。< / p>
根据你的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),第二个就是你想要的。
在python安装上使用错误的sys.maxunicode
时,这两个表达式都不起作用。
另见:this相关。