在python3中查找字符串中有一个表情符号

Siy*_*new 4 python python-3.x emoji

我想使用Python 3 is_emoji检查字符串是否只包含一个表情符号.例如,有一个函数检查字符串是否只有一个表情符号.

def is_emoji(s):
    pass

is_emoji("") #True
is_emoji("??") #False
Run Code Online (Sandbox Code Playgroud)

我尝试使用正则表达式但emojis没有固定长度.例如:

print(len("??".encode("utf-8"))) # 6 
print(len("".encode("utf-8"))) # 4
Run Code Online (Sandbox Code Playgroud)

Dun*_*nes 10

您可以尝试使用此表情符号包.它主要用于将转义序列转换为unicode表情符号,但结果它包含一个最新的表情符号列表.

from emoji import UNICODE_EMOJI

def is_emoji(s):
    return s in UNICODE_EMOJI
Run Code Online (Sandbox Code Playgroud)

但是有一些复杂情况,因为有时两个unicode代码点可以映射到一个可打印的字形.例如,人类表情符号后跟"表情符号修饰符fitzpatrick类型"应该修改前面表情符号的颜色; 并且由"零宽度木匠"分隔的某些表情符号应该被视为单个字符.

  • “UNICODE_EMOJI”字典已在 2.0 中删除。我建议使用 `bool(emoji.emoji_count(s))` (4认同)
  • 请注意,UNICODE_EMOJI 有 4 个键,代表支持的语言。这意味着不要使用上面的 return 语句,而是使用 `return s in UNICODE_EMOJI['en']` (2认同)

Mik*_*ler 5

这适用于 Python 3:

def is_emoji(s):
    emojis = "??" # add more emojis here
    count = 0
    for emoji in emojis:
        count += s.count(emoji)
        if count > 1:
            return False
    return bool(count)
Run Code Online (Sandbox Code Playgroud)

测试:

>>> is_emoji("")
True
>>> is_emoji('?')
True
>>> is_emoji("??")
False
Run Code Online (Sandbox Code Playgroud)

结合 Dunes 的回答,避免输入所有表情符号:

from emoji import UNICODE_EMOJI

def is_emoji(s):
    count = 0
    for emoji in UNICODE_EMOJI:
        count += s.count(emoji)
        if count > 1:
            return False
    return bool(count)
Run Code Online (Sandbox Code Playgroud)

这并不可怕,因为UNICODE_EMOJI包含近 1330 个项目,但它有效。

  • 很抱歉进行尸检。此处的最后一个代码示例似乎不适用于组合的字符。比如普通的one符号是数字1和键帽修饰符的组合? (2认同)