在python中使用re删除unicode表情符号

在python中使用re删除unicode表情符号,第1张

在python中使用re删除unicode表情符号

您未对非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的最新版本,并具有可以快速更新到将来发行版的基础结构。您的项目要做的就是在有新版本时进行升级。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5643580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存