Содержание
  1. Важно: строки в Python неизменяемы
  2. Метод replace() — удалить конкретный символ или подстроку
  3. Метод translate() — удалить сразу набор символов
  4. strip(), lstrip(), rstrip() — удалить символы по краям
  5. Срезы — удалить символ по индексу
  6. re.sub() — удалить символы по шаблону
  7. Генератор + join() — удаление по условию
  8. Сравнение методов: что и когда применять
  9. Частые вопросы
  10. Заключение
ГайдыОбновлено · 07.2026

Как удалить символы из строки в Python

17 мая 2024 · 6 минут чтения

Чтобы удалить символ из строки в Python, создают новую строку без этого символа — строки неизменяемы, поэтому «удаление» всегда возвращает копию. Для одного символа или подстроки используют str.replace(x, ""), для набора символов — str.translate, для пробелов по краям — str.strip(), для шаблонов — re.sub(), для конкретной позиции — срезы.

Ниже — все рабочие способы с примерами «до → после», сравнительная таблица «метод → когда применять» и ответы на частые вопросы. Каждый пример проверен и готов к копированию.

Как выбрать метод удаления за 10 секунд

  • Знаю точный символ или подстроку → replace()
  • Убираю сразу набор символов (например, все скобки и дефисы) → translate()
  • Чищу только начало/конец (пробелы, кавычки) → strip() / lstrip() / rstrip()
  • Удаляю по шаблону (цифры, пунктуация, не-буквы) → re.sub()
  • Условие сложнее регулярки → генератор + join()
  • Знаю позицию (индекс) символа → срезы

Важно: строки в Python неизменяемы

Ни один метод не меняет исходную строку «на месте». Все они возвращают новую строку, а старая остаётся прежней. Поэтому результат нужно присвоить переменной, иначе изменение потеряется.

text = "Привет, мир!"
text.replace(",", "")       # результат не сохранён — потерян
print(text)                  # Привет, мир.  (без изменений)

text = text.replace(",", "") # правильно: присваиваем обратно
print(text)                  # Привет мир.

Метод replace() — удалить конкретный символ или подстроку

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

# Убираем все дефисы из телефона
phone = "1-800-555-0199"
result = phone.replace("-", "")
print(result)   # до: 1-800-555-0199 → после: 18005550199

Третий аргумент count ограничивает число замен — например, удалить только первое вхождение:

s = "a-b-c-d"
print(s.replace("-", "", 1))   # до: a-b-c-d → после: ab-c-d

Минус подхода: чтобы убрать несколько разных символов, придётся вызывать replace() цепочкой. Для набора символов лучше translate().

Метод translate() — удалить сразу набор символов

Один проход по строке убирает любой набор символов. Таблицу удаления строит str.maketrans("", "", chars): всё, что попало в третий аргумент, вырезается.

# Оставляем в номере только цифры
phone = "+7 (900) 123-45-67"
result = phone.translate(str.maketrans("", "", " ()+-"))
print(result)   # до: +7 (900) 123-45-67 → после: 79001234567

Это быстрее, чем несколько replace() подряд, потому что строка обрабатывается за один проход. Идеально для чистки пунктуации фиксированным списком.

strip(), lstrip(), rstrip() — удалить символы по краям

Эти методы срезают символы только с начала (lstrip), конца (rstrip) или с обеих сторон (strip). Без аргумента убираются пробельные символы.

raw = "   данные  "
print(raw.strip())            # до: '   данные  ' → после: 'данные'

print("...файл.txt".lstrip("."))   # до: ...файл.txt → после: файл.txt
print("file.txt...".rstrip("."))   # до: file.txt... → после: file.txt

Частая ошибка. Аргумент — это набор символов, а не подстрока. Метод срезает с краёв любой символ из набора, а не строку целиком:

# Порядок символов не важен — это множество
print("abcHelloabc".strip("abc"))   # Hello
print("cabHellobca".strip("cab"))   # Hello  (тот же результат)

# Поэтому это НЕ удаление суффикса '.txt':
print("test.txt".strip("t"))        # est.tx  (сняли 't' с обоих краёв)

Если нужно снять именно суффикс или префикс целиком (Python 3.9+), используйте removesuffix() и removeprefix():

print("report.csv".removesuffix(".csv"))   # report
print("tmp_data".removeprefix("tmp_"))      # data

Срезы — удалить символ по индексу

Когда известна позиция символа, его вырезают, «склеивая» строку до и после индекса. Строку не сканируем целиком — работаем по координатам.

s = "Python"
print(s[1:])            # удалить первый:  ython
print(s[:-1])           # удалить последний: Pytho

i = 2                   # удалить символ на позиции 2 ('t')
print(s[:i] + s[i+1:])  # до: Python → после: Pyhon

print(s[:2] + s[4:])    # удалить диапазон 2..4 → Pyon

re.sub() — удалить символы по шаблону

Когда удаление зависит от класса символов (цифры, знаки, всё кроме букв), подключают модуль re. Второй аргумент — пустая строка.

import re

# Удалить все цифры
print(re.sub(r"\d+", "", "Заказ №123, №456"))   # Заказ №, №

# Оставить только цифры (убрать всё, что не цифра)
print(re.sub(r"\D", "", "тел: +7-900"))          # 7900

# Убрать пунктуацию, сохранив буквы и пробелы
print(re.sub(r"[^\w\s]", "", "Привет, мир!"))    # Привет мир

В Python 3 \w по умолчанию учитывает Unicode, поэтому кириллица сохраняется. Регулярки — самый гибкий, но и самый «тяжёлый» инструмент: для простой замены символа они избыточны.

Генератор + join() — удаление по условию

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

text = "a1b2c3"
# Убрать все цифры
result = "".join(ch for ch in text if not ch.isdigit())
print(result)   # до: a1b2c3 → после: abc

# Убрать набор символов через множество (быстрый поиск)
remove = set("aeiou")
print("".join(ch for ch in "education" if ch not in remove))  # dctn

Генераторное выражение экономит память по сравнению со списковым включением [...], так как не строит промежуточный список.

Сравнение методов: что и когда применять

Метод Когда применять Особенности
replace() Известен точный символ или подстрока Есть лимит count; для многих символов — цепочка вызовов
translate() Убрать сразу набор символов Один проход, быстро; нужна таблица maketrans
strip/lstrip/rstrip Чистка краёв (пробелы, кавычки) Аргумент — множество символов, не подстрока
Срезы Удаление по индексу/диапазону Быстро, без сканирования всей строки
re.sub() Удаление по шаблону (цифры, пунктуация) Максимально гибко, но медленнее и сложнее
Генератор + join() Сложное условие удаления Универсально; читаемо; экономит память

Частые вопросы

Почему после replace() строка не изменилась?

Строки в Python неизменяемы, метод возвращает новую строку. Нужно присвоить результат обратно: text = text.replace(",", ""). Без присваивания изменение теряется.

Как удалить только первое вхождение символа?

Передайте третий аргумент count: "a-b-c".replace("-", "", 1) вернёт "ab-c" — заменится только первый дефис.

Чем translate() лучше нескольких replace()?

translate() убирает весь набор символов за один проход по строке, тогда как цепочка replace() проходит строку заново на каждый символ. На больших строках разница в скорости заметна.

Почему strip(‘.txt’) удаляет лишние буквы?

Аргумент strip() — это множество символов, а не подстрока. Он срезает с краёв любой символ из набора {'.', 't', 'x'}. Чтобы снять именно суффикс, используйте removesuffix(".txt") (Python 3.9+).

Как удалить символ по конкретному индексу?

Склейте срезы до и после позиции: s[:i] + s[i+1:]. Для первого символа подойдёт s[1:], для последнего — s[:-1].

Какой метод самый быстрый?

Для набора фиксированных символов — translate(). Для одного символа — replace(). Регулярные выражения гибче всех, но медленнее; их берут, когда удаление зависит от шаблона.

Заключение

Универсального «лучшего» метода нет — выбор зависит от задачи. Для точечной замены берите replace(), для набора символов — translate(), для краёв — strip(), для шаблонов — re.sub(), для позиции — срезы, а для нестандартного условия — генератор с join(). Главное помнить: строка неизменяема, и результат всегда нужно сохранить в переменную. Полное описание строковых методов есть в официальной документации Python.

Дальше по теме строк: переворот строки с помощью рекурсии, подсчёт типов символов в строке, сопоставление начала и конца строк и разделение текстовых строк по разделителям.

Читайте также

3 материала