我想迭代一个字符串并输出所有的emojis。
我正在尝试迭代字符,并针对emoji list检查它们。
然而,python似乎将unicode字符拆分为较小的字符,破坏了我的代码。例如:
>>> list(u'Test \U0001f60d')
[u'T', u'e', u's', u't', u' ', u'\ud83d', u'\ude0d']
为什么你'U0001f60d'会分裂?
或者什么是提取所有表情符号的更好方法?这是我原来的提取代码:
def get_emojis(text):
emojis = []
for character in text:
if character in EMOJI_SET:
emojis.append(character)
return emojis
答案 0 :(得分:4)
Python 3.3之前的内部使用UTF-16LE(窄版本)或UTF-32LE(宽版本)来存储Unicode,并且由于leaky abstraction向用户公开了这个细节。 UTF-16LE使用surrogate pairs将U + FFFF上方的Unicode字符表示为两个代码点。使用广泛的Python构建或切换到Python 3.3或更高版本来解决问题。
处理狭义构建的一种方法是匹配代理对:
Python 2.7(窄版本):
>>> s = u'Test \U0001f60d'
>>> len(s)
7
>>> re.findall(u'(?:[\ud800-\udbff][\udc00-\udfff])|.',s)
[u'T', u'e', u's', u't', u' ', u'\U0001f60d']
Python 3.6:
>>> s = 'Test \U0001f60d'
>>> len(s)
6
>>> list(s)
['T', 'e', 's', 't', ' ', '']
答案 1 :(得分:0)
试试这个,
import re
re.findall(r'[^\w\s,]', my_list[0])
正则表达式r'[^\w\s,]'
匹配任何不是单词,空格或逗号的字符。
答案 2 :(得分:-1)
问题如上所述。解决它的可能行动描述了here