Как найти строку типа \ x60 \ xe2 \ x4b (с указанием смайлика), используя регулярное выражение в python - PullRequest
0 голосов
/ 12 мая 2018
import re

string="b'@DerkGently @seanferg85 @Umbertobaggio @EL4JC and he already had Popular support.. most people know this already. A\xe2\x80\xa6 '"

print(re.findall(r"\x[0-9a-z]{2}",string))

Список, возвращаемый функцией findall (), пуст: (

Ответы [ 4 ]

0 голосов
/ 12 мая 2018

Проблема здесь в том, что ваша строка является Python-представлением объекта Python bytes, который практически бесполезен.

Скорее всего, у вас был объект bytes, например:

b = b'@DerkGently @seanferg85 @Umbertobaggio @EL4JC and he already had Popular support.. most people know this already. A\xe2\x80\xa6 '

… и вы преобразовали его в строку, например:

s = str(b)

Не делай этого. Вместо этого расшифруйте его:

s = b.decode('utf-8')

Это даст вам фактические символы, которые вы можете затем легко сопоставить, вместо того, чтобы пытаться сопоставить символы в строковом представлении представления байтов, а затем трудоемко восстанавливать действительные символы из результатов.

Тем не менее, стоит отметить, что \xe2\x80\xa6 - это не эмодзи, это символ горизонтального многоточия . Если это не то, что вы хотели, вы уже испортили данные до этого момента.

0 голосов
/ 12 мая 2018

Вам нужно re.compile(ur'A\xe2\x80\xa6',re.UNICODE)

Скомпилируйте регулярное выражение Unicode и используйте это сопоставление с шаблоном для своей находки, найдите все, подводные лодки и т. Д.

0 голосов
/ 12 мая 2018

Попробуйте это.Я соединил строку в вашем вопросе с тем, что в вашем заголовке, чтобы сделать последнюю строку поиска

import re

k = r"@DerkGently @seanferg85 @Umbertobaggio @EL4JC and he already had Popular support.. most people know this already. A\xe2\x80\xa6 for a string like \x60\xe2\x4b(indicating a emoticon) using regular expression in python"
print(k)
print()
p = re.findall(r"((\\x[a-z0-9]{1,}){1,})", k)
for each in p:
    print(each[0])

Вывод

@DerkGently @seanferg85 @Umbertobaggio @EL4JC and he already had Popular support.. most people know this already. A\xe2\x80\xa6 for a string like \x60\xe2\x4b(indicating a emoticon) using regular expression in python

\xe2\x80\xa6
\x60\xe2\x4b
0 голосов
/ 12 мая 2018

Не регулярное выражение само по себе , но может помочь вам в любом случае.

def emojis(s):
    return [c for c in s if ord(c) in range(0x1F600, 0x1F64F)]

print(emojis("hello world ?"))  # sample usage
...