Я вижу две проблемы с вашим поиском:
- вы пытаетесь найти текстовое представление строки utf8 (
\xXX
представляет байт в шестнадцатеричном формате),То, что вы на самом деле должны делать, - это сопоставление с контентом (фактическими байтами). - вы включаете маркер конца строки (
$
) в свой поиск,где вы, вероятно, заинтересованы в его появлении где-либо в строке.
Должно работать что-то вроде следующего, хотя и хрупкое (более надежное решение см. ниже):
re.search(b'\xf0\x9f\x98.', text_utf8)
Это даст вам первое появление 4-байтовых последовательностей Unicode с префиксом \xf0\x9f\x98
.
Если вы имеете дело с только с UTF-8, это должно у TTBOMK иметь однозначные совпадения(т.е. вам не нужно беспокоиться о появлении этого префикса в середине более длинной последовательности).
Более надежное решение, если у вас есть опция сторонних модулей, будетустановка модуля regex и использование следующего:
regex.search('\p{Emoji=Yes}', text_utf8.decode('utf8'))
Преимущества этого метода в том, что он более читабелен и понятен, а также, вероятно, более перспективен на будущее.(См. здесь для получения дополнительных свойств Юникода, которые могут помочь в вашем случае использования)
Обратите внимание, что в этом случае вы также можете иметь дело с text_utf8
как фактическим unicode
(str
в строке py3), без преобразования ее в байтовую строку, что может иметь другие преимущества в зависимости от остальной части вашего кода.