Сообщить об ошибке.

Удаление пунктуации из строки

Для удаления пунктуации из строки Python воспользуемся методом строки str.replace(). А именно, в цикле пройдемся по всем символам пунктуации, и если они есть, то просто заменим его на пустую строку.

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

Подробный пример для понимания алгоритма (самый медленный способ):

# исходная строка
>>> line = '- Мама мыла раму, а Маша помогала. (из прописи 1 класса)'
>>> import string
>>> string.punctuation
# '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

# пунктуацию будем удалять в цикле
for p in string.punctuation:
    if p in line:
        # банальная замена символа в строке
        line = line.replace(p, '')

>>> line.strip()
# 'Мама мыла раму а Маша помогала из прописи 1 класса'

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

Короткие, но более эффективные варианты:

Вариант 1 (метод str.translate()):

# самый быстрый и эффективный вариант
>>> import string
>>> line = '- Мама мыла раму, а Маша помогала. (из прописи 1 класса)'
>>> s = line.translate(str.maketrans('', '', string.punctuation))
>>> s
# ' Мама мыла раму а Маша помогала из прописи 1 класса'

Вариант 2 (множество):

>>> import string
>>> line = '- Мама мыла раму, а Маша помогала. (из прописи 1 класса)'
# используем `set()` для скорости
>>> exclude = set(string.punctuation)
>>> s = ''.join(ch for ch in line if ch not in exclude)
>>> s
# ' Мама мыла раму а Маша помогала из прописи 1 класса'

Вариант 3 (модуль re):

>>> import re, string
>>> line = '- Мама мыла раму, а Маша помогала. (из прописи 1 класса)'
>>> regex = re.compile('[%s]' % re.escape(string.punctuation))
>>> s = regex.sub('', line)
>>> s
# ' Мама мыла раму а Маша помогала из прописи 1 класса'