[英]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.