dim*_*s93 8 regex unicode python-2.7
我有一个包中的unicode符号列表emoji.我的最终目标是创建一个函数,将一个字符串作为unicode输入,即something,然后删除所有表情符号,即"something".以下是我想要实现的目标:
from emoji import UNICODE_EMOJI
text = 'something'
exclude_list = UNICODE_EMOJI.keys()
output = ... = 'something'
Run Code Online (Sandbox Code Playgroud)
我一直在努力做到这一点,在这个过程中,我遇到了一个奇怪的行为,我在下面展示,你可以看到.我相信如果下面的代码是固定的,那么我将能够实现我的最终目标.
import regex as re
print u'\U0001F469' #
print u'\U0001F60C' #
print u'\U0001F469\U0001F60C' #
text = u'some\U0001F469\U0001F60Cthing'
print text # something
# Removing "" works
print re.sub(ur'[\U0001f469\U0001F60C]+', u'', text) # something
# Removing only "" doesn't work
print re.sub(ur'[\U0001f469]+', u'', text) # some?thing
Run Code Online (Sandbox Code Playgroud)
在Python 2.7的大多数版本中,0x10000以上的Unicode代码点被编码为代理对,这意味着Python实际上将它们视为两个字符。您可以使用 向自己证明这一点len(u'\U0001F469')。
解决此问题的最佳方法是迁移到将这些代码点正确视为单个实体而不是代理对的 Python 版本。您可以为此编译 Python 2.7,最新版本的 Python 3 将自动执行此操作。
要创建用于 的正则表达式replace,只需将所有字符与 结合在一起即可|。由于字符列表已使用代理对进行编码,因此它将创建正确的字符串。
subs = u'|'.join(exclude_list)
print re.sub(subs, u'', text)
Run Code Online (Sandbox Code Playgroud)