Как обнаружить emojis в байтовых объектах [duplicate]

Перейдите к своему config.php. У меня такая же проблема. Проверьте имя пользователя и пароль, а также sql select - это то же имя, что и config.

12
задан Mona Jalal 29 October 2015 в 03:44
поделиться

8 ответов

На Python 2 вы должны использовать литерал u'' для создания строки Unicode. Кроме того, вы должны передать флаг re.UNICODE и преобразовать свои входные данные в Unicode (например, text = data.decode('utf-8')):

#!/usr/bin/env python
import re

text = u'This dog \U0001f602'
print(text) # with emoji

emoji_pattern = re.compile("["
        u"\U0001F600-\U0001F64F"  # emoticons
        u"\U0001F300-\U0001F5FF"  # symbols & pictographs
        u"\U0001F680-\U0001F6FF"  # transport & map symbols
        u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                           "]+", flags=re.UNICODE)
print(emoji_pattern.sub(r'', text)) # no emoji

Выход

This dog                   
25
ответ дан jfs 28 August 2018 в 19:37
поделиться

Это работает для меня. Он мотивирован https://stackoverflow.com/a/43813727/6579239

import unicodedata
from unidecode import unidecode

def deEmojify(inputString):
     returnString = ""
     for character in inputString:
     try:
         character.encode("ascii")
         returnString += character
     except UnicodeEncodeError:
         returnString += ''
     return returnString
0
ответ дан Abdul-Razak Adam 28 August 2018 в 19:37
поделиться

Полная версия Удалить emojis:

def remove_emoji(string):
    emoji_pattern = re.compile("["
                           u"\U0001F600-\U0001F64F"  # emoticons
                           u"\U0001F300-\U0001F5FF"  # symbols & pictographs
                           u"\U0001F680-\U0001F6FF"  # transport & map symbols
                           u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                           u"\U00002702-\U000027B0"
                           u"\U000024C2-\U0001F251"
                           "]+", flags=re.UNICODE)
    return emoji_pattern.sub(r'', string)
8
ответ дан Ali Tavakoli 28 August 2018 в 19:37
поделиться

Поскольку [...] означает любой из набора символов, а потому, что два символа в группе, разделенные тире, означают диапазон символов (часто «az» или «0-9»), ваш паттерн говорит: косой чертой, за которой следуют любые символы в группе, содержащей x, {, 1, F, 6, 0, 1, диапазон} через x, {, 1, F, 6, 4, f или} ", за которым следует косая черта и буква u ". Этот диапазон в середине - это то, что re вызывает неправильный диапазон символов.

3
ответ дан Bryan Oakley 28 August 2018 в 19:37
поделиться

Если вы используете пример из принятого ответа и все еще получаете ошибки «неправильного диапазона символов», вы, вероятно, используете узкую сборку ( см. этот ответ для получения более подробной информации). Переформатированная версия регулярного выражения, которая, похоже, работает:

emoji_pattern = re.compile(
    u"(\ud83d[\ude00-\ude4f])|"  # emoticons
    u"(\ud83c[\udf00-\uffff])|"  # symbols & pictographs (1 of 2)
    u"(\ud83d[\u0000-\uddff])|"  # symbols & pictographs (2 of 2)
    u"(\ud83d[\ude80-\udeff])|"  # transport & map symbols
    u"(\ud83c[\udde0-\uddff])"  # flags (iOS)
    "+", flags=re.UNICODE)
8
ответ дан Community 28 August 2018 в 19:37
поделиться

Принятый ответ, а другие работали для меня немного, но я в конечном итоге решил снять все символы за пределами Basic Multilingual Plane . Это исключает будущие дополнения к другим планам Юникода (там, где есть и такие живые), что означает, что мне не нужно обновлять свой код каждый раз, когда добавляются новые символы Юникода:).

В Python 2.7 конвертировать в unicode если ваш текст еще нет, а затем используйте отрицательное регулярное выражение ниже (subs ничего not в регулярном выражении, это все символы из BMP , кроме для суррогатов, которые используются для создания 2 байта Дополнительные символы многоязычного языка ).

NON_BMP_RE = re.compile(u"[^\U00000000-\U0000d7ff\U0000e000-\U0000ffff]", flags=re.UNICODE)
NON_BMP_RE.sub(u'', unicode(text, 'utf-8'))
3
ответ дан KevinTydlacka 28 August 2018 в 19:37
поделиться

Если вы не хотите использовать регулярное выражение, лучшим решением может быть использование emoji python package .

Вот простая функция для возврата бесплатного текста emoji (благодаря этот SO ответ ):

import emoji
def give_emoji_free_text(text):
    allchars = [str for str in text.decode('utf-8')]
    emoji_list = [c for c in allchars if c in emoji.UNICODE_EMOJI]
    clean_text = ' '.join([str for str in text.decode('utf-8').split() if not any(i in str for i in emoji_list)])
    return clean_text

Если вы имеете дело со строками, содержащими emojis, это просто

>> s1 = "Hi                   
0
ответ дан kingmakerking 28 August 2018 в 19:37
поделиться

Пробовал все ответы, к сожалению, они не удалили новое обнимающее лицо emoji

0
ответ дан octohedron 28 August 2018 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: