[英]How to properly iterate over unicode characters in Python
我想遍历一个字符串并输出所有表情符号。
我正在尝试遍历字符,并根据表情符号列表检查它们。
但是,python 似乎将 unicode 字符拆分为较小的字符,从而破坏了我的代码。 例子:
>>> list(u'Test \U0001f60d')
[u'T', u'e', u's', u't', u' ', u'\ud83d', u'\ude0d']
有什么想法为什么 u'\\U0001f60d' 会分裂?
或者有什么更好的方法来提取所有表情符号? 这是我的原始提取代码:
def get_emojis(text):
emojis = []
for character in text:
if character in EMOJI_SET:
emojis.append(character)
return emojis
Python 3.3 之前的版本在内部使用 UTF-16LE(窄构建)或 UTF-32LE(宽构建)来存储 Unicode,并且由于抽象的泄漏,将此细节公开给用户。 UTF-16LE 使用代理对将 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']
蟒蛇 3.6:
>>> s = 'Test \U0001f60d'
>>> len(s)
6
>>> list(s)
['T', 'e', 's', 't', ' ', '😍']
尝试这个,
import re
re.findall(r'[^\w\s,]', my_list[0])
正则表达式r'[^\\w\\s,]'
匹配任何不是单词、空格或逗号的字符。
我一直在与 Unicode 斗争,但这并不像看起来那么容易。 有一个包含所有警告的emoji
库(我不隶属于)。
如果要列出字符串中出现的所有表情符号,我建议使用emoji.emoji_lis
。
只需查看emoji.emoji_lis
的来源即可了解它实际上有多复杂。
例子
>>> emoji.emoji_lis('🥇🥈🇧🇹')
>>> [{'location': 0, 'emoji': '🥇'}, {'location': 1, 'emoji': '🥈'}, {'location': 2, 'emoji': '🇧🇹'}]
列表示例(并不总是有效)
>>> list('🥇🥈🇧🇹')
>>> ['🥇', '🥈', '🇧', '🇹']
问题如上所述。 解决此问题的可能措施
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.