我认为没有任何图书馆可以做到这一点。然而,这可以通过一个函数来完成:
\U0001F1E6\U0001F1E8
是第一个 unicode 标志并且\U0001F1FF\U0001F1FC
是最后一个,所以几乎涵盖了所有这些。有3 more http://unicode.org/emoji/charts/full-emoji-list.html#subdivision-flag这会导致一些问题。
这是一个检查输入是否为标志的函数:
def is_flag_emoji(c):
return "\U0001F1E6\U0001F1E8" <= c <= "\U0001F1FF\U0001F1FC" or c in ["\U0001F3F4\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f", "\U0001F3F4\U000e0067\U000e0062\U000e0073\U000e0063\U000e0074\U000e007f", "\U0001F3F4\U000e0067\U000e0062\U000e0077\U000e006c\U000e0073\U000e007f"]
测试:
>>> is_flag_emoji('a')
False
>>> is_flag_emoji('????')
False
>>> is_flag_emoji("""????????""")
True
所以你可以相应地将 if 语句更改为if c in emoji.UNICODE_EMOJI or is_flag_emoji(c):
.
但这有一个问题;由于很多标志是通过连接多个字符来制作的,因此您可能无法识别表情符号。
>>> s
'???????? here is more text ???????? and more'
>>>emoji_lis(s)
Matched!! ???? b'\\U0001f1fe'
Matched!! ???? b'\\U0001f1ea'
Matched!! ???? b'\\U0001f1e9'
[{'location': 0, 'emoji': '????'}, {'location': 1, 'emoji': '????'}, {'location': 22, 'emoji': '????'}]