Find there is an emoji in a string in python3

26,407

Solution 1

This works in 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)

Test:

>>> is_emoji("😘")
True
>>> is_emoji('◼')
True
>>> is_emoji("😘◼️")
False

Combine with Dunes' answer to avoid typing all emojis:

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)

This is not terrible fast because UNICODE_EMOJI contains nearly 1330 items, but it works.

Solution 2

You could try using this emoji package. It's primarily used to convert escape sequences into unicode emoji, but as a result it contains an up to date list of emojis.

from emoji import UNICODE_EMOJI

def is_emoji(s):
    return s in UNICODE_EMOJI

There are complications though, as sometimes two unicode code points can map to one printable glyph. For instance, human emoji followed by an "emoji modifier fitzpatrick type" should modify the colour of the preceding emoji; and certain emoji separated by a "zero width joiner" should be treated like a single character.

Share:
26,407
Siyanew
Author by

Siyanew

Updated on March 26, 2020

Comments

  • Siyanew
    Siyanew about 4 years

    I want to check that a string contains only one emoji, using Python 3. For example, there is a is_emoji function that checks that the string has only one emoji.

    def is_emoji(s):
        pass
    
    is_emoji("😘") #True
    is_emoji("😘◼️") #False
    

    I try to use regular expressions but emojis didn't have fixed length. For example:

    print(len("◼️".encode("utf-8"))) # 6 
    print(len("😘".encode("utf-8"))) # 4
    
  • Siyanew
    Siyanew about 8 years
    I think it's good ;) but I have to Type all emojis there :D
  • Matt Cowley
    Matt Cowley about 6 years
    Sorry to necropost. The last code example here doesn't seem to work with characters that are combined. Such as the normal one symbol which is a combination of digit one and the keycap modifier?
  • mgokhanbakal
    mgokhanbakal almost 4 years
    There is a better way of doing it without writing a custom function. Use emoji package!
  • Mike Müller
    Mike Müller almost 4 years
    The second part of this answer is using the package emoji already. ;).
  • Admin
    Admin over 3 years
    This will check if the character is an emoji or not. Is there any way to check if a whole string contains an emoji?
  • jack1536
    jack1536 about 3 years
    Note that UNICODE_EMOJI has 4 keys representing supported languages. This means that instead of the return statement above, use return s in UNICODE_EMOJI['en']
  • Nico
    Nico almost 2 years
    To check if a whole string contains an emoji make a reg exp like 1. r = '|'.join(list(UNICODE_EMOJI['en'].keys())) 2. r = r.replace('|*', '|*') 3. r = re.compile(r)