Как убрать знаки препинания из текста при работе со строками в Python

Раздел: Работа со строками -> Строки

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

Метод str.translate работает с таблицей сопоставления кодов символов. Таблица создаётся функцией str.maketrans. Если в третьем аргументе этой функции передать строку из удаляемых знаков, все такие символы будут исключены из исходной строки.

Набор пунктуации для английского и большинства технических форматов находится в модуле string. Достаточно импортировать константу string.punctuation.

import string

text = "Привет, мир! Как дела? Отлично: Python работает."
table = str.maketrans('', '', string.punctuation)
cleaned = text.translate(table)
print(cleaned)

вывести номер строки python (вывод номера строки в python)

Привет мир Как дела Отлично Python работает

вывести первый символ строки python (вывести первый символ строки в python)

Функция str.maketrans возвращает объект таблицы. Таблицу целесообразно создавать один раз за пределами цикла при обработке большого количества строк.

Если требуется удалить дополнительно кавычки «ёлочки», «лапки» или другие символы, их нужно добавить к набору в третьем аргументе:

import string

extra = string.punctuation + "«»“”‘’"
table = str.maketrans('', '', extra)
text = "Строка «демо»: Python отлично подходит!"
cleaned = text.translate(table)
print(cleaned)

Python заменить число (замена числа в python (например, в строке))

Строка демо Python отлично подходит

Python часть текста (извлечение подстроки из строки в python)

Почему после translate остаются типографские знаки?

Константа string.punctuation содержит только ASCII-символы. Русский текст нередко использует кавычки «ёлочки», «лапки», среднее и длинное тире, поэтому такой translate не удалит их. Дополнение набора ликвидирует проблему. Отдельное внимание стоит уделить дефису: он тоже входит в ASCII-пунктуацию, и при необходимости его сохранения следует исключить из списка удаляемых символов.

Какая ошибка возможна при вызове translate без таблицы?

Метод translate ожидает таблицу. Передача произвольной строки или символа приводит к ошибке. Правильная замена выглядит как text.translate(str.maketrans('', '', string.punctuation)) или использование словаря с кодами символов.

Как удалить пунктуацию регулярным выражением?

Модуль re позволяет управлять удалением целыми классами символов. Класс \w соответствует буквам, цифрам и подчёркиванию, а \s пробельным символам. Поэтому выражение [^\w\s] убирает все остальные символы, включая знаки препинания.

import re

text = "Привет, world! Это тест: value_1."
cleaned = re.sub(r'[^\w\s]', '', text)
print(cleaned)

Python последнее слово в строке (извлечение последнего слова из строки в python)

Привет world Это тест value_1

индекс элемента строки python (получение индекса символа или подстроки в строке python)

Подход подходит для задачи «удалить знаки препинания, оставив буквы, цифры, пробелы и подчёркивание». Недостаток способа: символ подчёркивания остаётся, потому что входит в определение \w. Для полного удаления пунктуации вместе с подчёркиванием используется выражение [^\w\s]|_.

import re
text = "test_value, test!"
cleaned = re.sub(r'[^\w\s]|_', '', text)
print(cleaned)

Print split python (использование split с print в python)

testvalue test

Python новая строка (использование символа новой строки в python)

Когда нужен строго точечный список исключаемых символов, применяется символьный класс из string.punctuation. Чтобы корректно заэкранировать спецсимволы, выражение строится через re.escape.

import re, string

pattern = "[" + re.escape(string.punctuation) + "]"
text = "Python: хорошо? Да!"
cleaned = re.sub(pattern, '', text)
print(cleaned)

Python количество пробелов (количество пробелов в строке python)

Python хорошо Да

число цифр python (количество цифр числа в python)

Как удалить знаки препинания без translate и re?

Генератор списков выполняет посимвольную фильтрацию и оставляет в результате только те символы, которых нет в подготовленном множестве.

import string

text = "Уже: нет; запятых, точек."
punct_set = set(string.punctuation)
cleaned = ''.join(char for char in text if char not in punct_set)
print(cleaned)

Python string index (метод str.index в python)

Уже нет запятых точек

метод replace python (метод replace в python)

Такой вариант полезен, когда необходимо добавить собственное условие, например, разрешить дефис или удалить пунктуацию, но не трогать цифры. Он работает медленнее translate на больших объёмах, но его легко читать.

Как удалить пунктуацию через функцию filter?

Функция filter принимает условие и последовательность. Результат собирается из тех элементов, для которых условие истинно.

import string

punct_set = set(string.punctuation)
text = "Пример: filter (удаляет) точку."
cleaned = ''.join(filter(lambda char: char not in punct_set, text))
print(cleaned)

Strip строки python (метод strip для строк в python)

Пример filter удаляет точку

символ пустой строки python (символ пустой строки в python)

Фильтрация применяется в коротких скриптах и при однострочной обработке данных.

Как убрать пунктуацию только в начале или конце?

Если внутренние знаки сохраняются, используют методы strip, lstrip и rstrip. Их аргумент задаёт множество удаляемых краевых символов.

import string

text = "!!!Привет, мир!!!"
print(text.strip(string.punctuation))
print(text.rstrip(string.punctuation))
print(text.lstrip(string.punctuation))

строки python определение (определение строк в python)

Привет, мир
!!!Привет, мир
Привет, мир!!!
- Python найти строку (поиск подстроки в строке python)
- позиция символа в строке python (поиск позиции символа в строке python)
- буква каждого слова python (получение первой буквы каждого слова в python)

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

Как переиспользовать таблицу translate при работе со списком строк?

Таблицу достаточно создать один раз. Функция-обёртка вызывается для каждой строки без повторной подготовки таблицы.

Пример
import string

PUNCT_TO_REMOVE = string.punctuation + "«»“”‘’"
PUNCT_TABLE = str.maketrans('', '', PUNCT_TO_REMOVE)

def clear_text(value: str) -> str:
    return value.translate(PUNCT_TABLE)

lines = [
    "Первый: вариант!",
    "Второй (с запятыми, точками).",
    "Третий; проверка полностью готова."
]
for line in lines:
    print(clear_text(line))
Первый вариант
Второй с запятыми точками
Третий проверка полностью готова

Как удалить знаки препинания, оставив дефис в составных словах?

Дефис имеет собственный код в string.punctuation. Его отсутствие в списке удаляемых символов решает задачу.

Пример
import string

text = "Многофункциональный Python-код: он удобен!"
deletion_set = string.punctuation.replace('-', '')
table = str.maketrans('', '', deletion_set)
cleaned = text.translate(table)
print(cleaned)
Многофункциональный Python-код он удобен

Как использовать словарь с ord для translate?

Словарь с кодами символов подходит тогда, когда набор исключений формируется программно, а не задаётся строкой.

Пример
from string import punctuation

text = "Точка. Запятая, восклицание!"
delete_map = {ord(char): None for char in punctuation}
cleaned = text.translate(delete_map)
print(cleaned)
Точка Запятая восклицание

Какие символы удаляет Unicode-категория P?

Стандартный re не поддерживает \p{P}. Для работы с Unicode-категориями используется модуль regex.

Пример
# Требуется установка: pip install regex
import regex

text = "Привет, «мир»; проверка 2024 года!"
cleaned = regex.sub(r'\p{P}+', '', text)
print(cleaned)
Привет мир проверка 2024 года

Как сделать очистку на основе isalnum и isspace?

Метод isalnum оставляет буквы и цифры. Метод isspace сохраняет пробелы и переносы строк. Такая логика не зависит от списка пунктуационных символов.

Пример
text = "Привет, всем! (2024 год)"
cleaned = ''.join(symbol for symbol in text if symbol.isalnum() or symbol.isspace())
print(cleaned)
Привет всем 2024 год

Как сжать пробелы после удаления пунктуации?

После удаления знаков препинания могут остаться двойные пробелы. Второй проход регулярным выражением превращает любую последовательность пробельных символов в один пробел.

Пример
import re

text = "Первая часть,   вторая часть!   Третья часть?"
no_punct = re.sub(r'[^\w\s]', '', text)
collapsed = re.sub(r'\s+', ' ', no_punct).strip()
print(collapsed)
Первая часть вторая часть Третья часть

удаление знаков препинания из строки в Python - comments

En
удалить знаки препинания python (python)