Удаление подстроки в строке с помощью python?

#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. Спасибо, что поняли это!