#python #regex
#python #регулярное выражение
Вопрос:
Есть строка, содержащая это
ud83dude80
ud83cudfb0
ud83dudd25
как и подстроки, все они начинаются с
ud83
(эмодзи телеграммы) и имеют разные 7 символов после
3
поэтому пытаюсь удалить их с помощью
text = re.sub(r'\ud83w{7}', '', text, flags=re.MULTILINE)
безуспешно, что я делаю не так? Спасибо!
Комментарии:
1. Не могли бы вы привести воспроизводимый пример? Также обратите внимание, что
в качестве буквальной обратной косой черты не является символом слова и не может быть сопоставлено
w
. Вы можете рассмотретьS
сокращенный символьный класс без пробелов.2. Нет смысла использовать
re.MULTILINE
, если регулярное выражение не содержит^
или$
.3.
w
не будет соответствовать символу обратной косой черты.4. S все еще не работает, просматривая предоставленный код результатов, мне интересно, может быть, это что-то о необработанной строке
5. Я думаю, что python не видит эти символы, это что-то о необработанных строках (извините, я не могу привести рабочий пример, поскольку это часть функции, которая зависит от слишком большого количества импорта, который вы все равно не хотите устанавливать, и я слишком новичок в программировании, чтобы писать его автономно, поскольку я получил эти строки от telethon bot)
Ответ №1:
Здесь вы не имеете дело с 12 символами. Кажется, это всего 2 символа Юникода, которые не могут быть напечатаны python и поэтому отображаются в их экранированной форме.
re.sub(r"[ud83dud83c]S", "", text)
Вы можете создать класс character [ud83dud83c]
вручную (добавив каждый разрешенный начальный символ) или найти способ сделать это программно.
Комментарии:
1. есть идеи о том, как преобразовать их в 12 символов, чтобы избавиться от них по шаблону?
2. Мой шаблон уже соответствует тексту примера вопроса. Если смайлики действительно могут начинаться с каждого варианта ud83, вы можете добавить их все в класс character . Их не более 16.
0-9
иa-f
:[ud830ud831 and so on]
. Вторая часть смайлика уже сопоставленаS
. @someNameJustToAnswer
Ответ №2:
Я думаю, что, если вы пытаетесь удалить все после вашего кода emoji в Telegram, w
символ не будет пойман
.
Попробуйте
text = re.sub(r'\ud83[w\]{7}', '', text, flags=re.MULTILINE)
который сообщает регулярному выражению искать 7 символов, которые могут
быть либо буквенно-цифровыми, либо .
Комментарии:
1. Почему вы также сопоставляете запятую и пробел?
2. Потому что я давно не смотрел на синтаксис регулярных выражений и думал, что это работает как список Python. Спасибо, что поняли это!