Помогите составить регулярное выражение, убрать все символы кроме букв, цифр и символов ? ! ,

217 просмотра
0
0 Комментариев

К примеру, из строки

😃👍Hello, как дела123?!»:) 😎

Получить просто

Hello, как дела123?!

Вот находил пример как убрать все символы кроме букв,

import re
list(filter(None, re.split('\W|\d', '😃👍Hello, как дела123?!'':) 😎')))
 
>>> ['Hello', 'как', 'дела']

но не знаю как оставлять цифры и ! ? , .


Добавить комментарий

1 Ответы

Python Опубликовано 09.12.2018
0

Если ещё можно _ (подчёркивание) оставить в дополнение к буквам, цифрам и '!?,.':

>>> import re
>>> s = '😃👍Hello, как дела123?_!'':+): )😎'
>>> re.sub(r'[^!?,.\w]+', '', s)
'Hello,какдела123?_!'

[/apcode]

re модуль из стандартной библиотеки не поддерживает [:alnum:] POSIX класс (str.isalnum() аналог). Можно использовать regex модуль с тем же интерфейсом:

>>> regex.sub(r'[^!?,.[:alnum:]]+', '', s)
'Hello,какдела123?!'

В этом случае _ удаляется.


Есть тонкие отличия в обработке не-ascii цифр:

>>> regex.sub(r'[^!?,.[:alnum:]]+', '', 'а_1²3½0123456789я')
'а13я'
>>> regex.sub(r'[^!?,.\w]+', '', 'а_1²3½0123456789я')
'а_130123456789я'
>>> re.sub(r'[^!?,.\w]+', '', 'а_1²3½0123456789я')
'а_1²3½0123456789я'

[:alnum:] здесь только ascii цифры распознаёт. \w в re модуле разрешает не только десятичные цифры, но и символы из категории digit, numeric, к примеру: ²½. \w в regex разрешает только Numeric_Type=decimal цифры (str.isdecimal()).


Чтобы удалить произвольную пунктуацию из текста, можно использовать \p{P} регулярное выражение:

#!/usr/bin/env python3
import regex # $ pip install regex
 
def remove_punctuation(text):
    return regex.sub(r"\p{P}+", "", text)

См. этот и другие варианты решения в Как найти символы из кортежа ('!',',','?') в строке и удалить их?

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up