Как удалить эмодзи из строки на python?

Рейтинг: 2Ответов: 1Опубликовано: 03.03.2023

Парсю объявление с домклика и попалось вот такое описание с эмодзи

text ="⚡️Квартира укомплектована... Отличный собственник 👍...🏘Опиcание квартиры...💰Условия сдачи...📳Звоните и..."

Я использовал следующий алгоритм, который увидел на stackoverflow

import re
def deEmojify(text):
    regrex_pattern = re.compile(pattern = "["
    u"\U0001F600-\U0001F64F"  # emoticons
    u"\U0001F300-\U0001F5FF"  # symbols & pictographs
    u"\U0001F680-\U0001F6FF"  # transport & map symbols
    u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                       "]+", flags = re.UNICODE)
    return regrex_pattern.sub(r'',text)

После отработки функции остаются вот эти эмодзи ⚡️

Вопрос, как избавиться от этого эмодзи ⚡️ и других, которые могут встретиться?

P.S. Еще не полностью разобрался в этой функции, что за 9-изначные коды и где их смотреть

Ответы

▲ 4

Вопрос решил, благодаря Герману Борисову за предоставленную информацию о Unicode! Ознакомившись с таблицей юникода, переписал функцию

def deEmojify(text):
    regrex_pattern = re.compile(pattern = "["
                                u"\U00000000-\U00000009"
                                u"\U0000000B-\U0000001F"
                                u"\U00000080-\U00000400"
                                u"\U00000402-\U0000040F"
                                u"\U00000450-\U00000450"
                                u"\U00000452-\U0010FFFF"
                                "]+", flags = re.UNICODE)
    return regrex_pattern.sub(r'',text)

В \U00000000-\U0000009 удаляются все знаки табуляции и т.д., кроме \n, потому что он мне нужен и его юникод 0000000A

Затем \U0000000B-\U0000001F продолжаю дальше удалять все табуляции и прочее вещи. После 001F идет американская раскладка клавиатуры + спец символы + числа. Мне это нужно, я решил оставить.

Тут \U00000080-\U00000400 я продолжаю удалять ненужные символы, которые могут встретиться. А после 00400 идет русская заглавная буква Ё. Мы русские порой забываем о ней и это нормально, но малая часть населения усердно ее пишут. Поэтому она нам нужна

Затем \U00000402-\U0000040F продолжаем удалять ненужные буквы из кириллицы.

Тут \U00000450-\U00000450 удаляем принудительно символ перед маленькой буквой ё. Ничего умнее не придумал, поэтому решил написать так.

И как кончилась русская раскладка \U00000452-\U0010FFFF удаляю все остальные символы. Результат прекрасный

print(deEmojify('⚡️Квартира укомплектована... Отличный собственник 👍\n...🏘Опиcание квартиры...💰Условия сдачи...📳Звоните и...'))
print(deEmojify('qwertyuiop[]'))
print(deEmojify('QWERTYUIOP{}|'))
print(deEmojify('asdfghjkl;\''))
print(deEmojify('ASDFGHJKL:"'))
print(deEmojify('zxcvbnm,./'))
print(deEmojify('ZXCVBNM<>?'))
print(deEmojify('Ёё1234567890'))
print(deEmojify('!@#$%^&*()-=+'))
print(deEmojify('!"№;%:?*()_+=\\/'))
print(deEmojify('йцукенгшщзхъ'))
print(deEmojify('ЙЦУКЕНГШЩЗХЪ'))
print(deEmojify('фывапролджэ'))
print(deEmojify('ФЫВАПРОЛДЖЭ'))
print(deEmojify('ячсмитьбю.'))
print(deEmojify('ЯЧСМИТЬБЮ,'))

Результат

Квартира укомплектована... Отличный собственник 
...Опиcание квартиры...Условия сдачи...Звоните и...
qwertyuiop[]
QWERTYUIOP{}|
asdfghjkl;'
ASDFGHJKL:"
zxcvbnm,./
ZXCVBNM<>?
Ёё1234567890
!@#$%^&*()-=+
!";%:?*()_+=\/
йцукенгшщзхъ
ЙЦУКЕНГШЩЗХЪ
фывапролджэ
ФЫВАПРОЛДЖЭ
ячсмитьбю.
ЯЧСМИТЬБЮ,