найти текстовые символы смайлики в строке - PullRequest
0 голосов
/ 05 марта 2019

В настоящее время я пишу программу на python, в которой мне нужно найти смайлики, подобные этим :), :(, :-), :-( должны быть заменены, если за ними следуют специальные символы и пунктуация должна быть заменена вэтот шаблон: ex: Hi, this is good :)# должен быть заменен на Hi, this is good :).

Я создал шаблон регулярного выражения для sub, но не смог вложить этот смайлик :-) в мой re.compile. Он считает, чтокак диапазон.

re.sub(r"[^a-zA-Z0-9:):D)]+", " " , words) это работает нормально, мне нужно добавить :-) смайлик к регулярному выражению.

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Один из подходов заключается в использовании следующего шаблона:

(:\)|:\(|:-\)|:-\()[^A-Za-z0-9]+

Это соответствует , а фиксирует смайлик, а затем сразу же соответствует любому количеству не буквенно-цифровых символов.Замена - это просто захваченный смайлик, удаляющий не альфа-символы.

input = "Hi, this is good :)#"
output = re.sub(r"(:\)|:\(|:-\)|:-\()[^A-Za-z0-9]+", "\1" , input)
print(output)

Hi, this is good :)
0 голосов
/ 05 марта 2019

Шаблон [^a-zA-Z0-9:):D)] ошибочен, поскольку это класс символов, предназначенный для соответствия последовательностям символов.Вам необходимо добавить альтернативу этому регулярному выражению, которая будет соответствовать последовательностям символов.

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

re.sub(r"(:-?[()D])|[^A-Za-z0-9\s]", r"\1" , s)

Или в Python 3.4 истарше, из-за ошибки re.sub :

re.sub(r"(:-?[()D])|[^A-Za-z0-9,\s]", lambda x: x.group(1) if x.group(1) else "", s)

Если вам действительно нужно избегать удаления запятых, добавьте , в класс отрицательных символов:

re.sub(r"(:-?[()D])|[^A-Za-z0-9,\s]", r"\1" , s)
                               ^

См. Демонстрационную версию regex .

Подробности

  • (:-?[()D]) - сопоставления и записи в группу 1 a :затем необязательный -, а затем один символ из класса символов: (, ) или D (при этом фиксируются такие смайлики, как :-), :-(, :), :(, :-D, :D)
  • [^A-Za-z0-9,\s] - соответствует любому символу, кроме буквы ASCII, цифры, запятой и пробела.Чтобы сделать его полностью поддерживающим Юникод, замените его на (?:[^\w\s,]|_).

См. Демонстрационную версию Python 3.5+ :

import re
s = "Hi, this is good :)#"
print( re.sub(r"(:-?[()D])|[^A-Za-z0-9,\s]", r"\1" , s) )
# => Hi, this is good :)

См. этот Python3.4- демо :

import re
s = "Hi, this is good :)#"
print( re.sub(r"(:-?[()D])|[^A-Za-z0-9,\s]", lambda x: x.group(1) if x.group(1) else "", s) )
# => Hi, this is good :)
0 голосов
/ 05 марта 2019

Вы можете экранировать специальные символы с помощью \ try:

re.sub("[^a-zA-Z0-9:):D:\-))]+", " " , words)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...