您未对非BMP unipre点使用正确的符号;您要使用
U0001FFFF, 大写
U和8位数字:
myre = re.compile(u'[' u'U0001F300-U0001F5FF' u'U0001F600-U0001F64F' u'U0001F680-U0001F6FF' u'u2600-u26FFu2700-u27BF]+', re.UNICODE)
可以简化为:
myre = re.compile(u'[' u'U0001F300-U0001F64F' u'U0001F680-U0001F6FF' u'u2600-u26FFu2700-u27BF]+', re.UNICODE)
因为您的前两个范围是相邻的。
您的版本正在指定(增加了可读性的空格):
[u1F30 0-u1F5F Fu1F60 0-u1F64 Fu1F68 0-u1F6F F u2600-u26FFu2700-u27BF]+
这是因为
uxxxx转义序列始终仅使用4个十六进制数字,而不是5。
这些范围中最大的范围是
0-u1F6F(因此,从数字
0到
Ὧ),它涵盖了Unipre标准的
很大 范围。
如果您使用UCS-4宽的Python可执行文件,则更正后的表达式将起作用:
>>> import re>>> myre = re.compile(u'['... u'U0001F300-U0001F64F'... u'U0001F680-U0001F6FF'... u'u2600-u26FFu2700-u27BF]+', ... re.UNICODE)>>> myre.sub('', u'Some example text with a sleepy face: U0001f62a')u'Some example text with a sleepy face: '
UCS-2等效项是:
myre = re.compile(u'(' u'ud83c[udf00-udfff]|' u'ud83d[udc00-ude4fude80-udeff]|' u'[u2600-u26FFu2700-u27BF])+', re.UNICODE)
您可以使用异常处理程序将两者结合到脚本中:
try: # Wide UCS-4 build myre = re.compile(u'[' u'U0001F300-U0001F64F' u'U0001F680-U0001F6FF' u'u2600-u26FFu2700-u27BF]+', re.UNICODE)except re.error: # Narrow UCS-2 build myre = re.compile(u'(' u'ud83c[udf00-udfff]|' u'ud83d[udc00-ude4fude80-udeff]|' u'[u2600-u26FFu2700-u27BF])+', re.UNICODE)
当然,正则表达式已经过时了,因为它不包括在较新的Unipre版本中定义的Emoji。它似乎涵盖了Emoji定义的Unipre 8.0(因为Unipre
9.0中添加了U + 1F91D HANDSHAKE)。
如果您需要最新的正则表达式,请从积极尝试使Emoji保持最新状态的软件包中获取一个;它特别支持生成这样的正则表达式:
import emojidef remove_emoji(text): return emoji.get_emoji_regexp().sub(u'', text)
该软件包当前是Unipre 11.0的最新版本,并具有可以快速更新到将来发行版的基础结构。您的项目要做的就是在有新版本时进行升级。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)