Пробелы в Python: удаление, замена, разделение строк

Раздел: Основы Python -> Строковые операции

Работа с пробелами в строках Python

Пробельные символы (пробел, табуляция, перевод строки) часто встречаются в текстовых данных. Их удаление, замена или проверка - типичная задача. Рассмотрим основные приёмы и подводные камни.

Как удалить пробелы с начала и конца строки наиболее эффективно?

Метод strip() удаляет все пробельные символы с обоих краёв строки. Это самый быстрый и читаемый способ для стандартных случаев.

text = '   Привет, мир!   \n'
result = text.strip()
print(repr(result))

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

'Привет, мир!'

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

Проблема: если нужно сохранить внутренние пробелы, strip() не трогает их. Но если в строке есть неразрывный пробел (\u00a0) или другие Unicode-пробелы, strip() может не сработать.

Решение: использовать strip() с явным указанием набора символов или регулярное выражение.

Как удалить все пробелы (включая внутренние) из строки?

text = 'П р и в е т'
# Вариант 1: замена пробела на пустую строку
result1 = text.replace(' ', '')
print(result1)

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

'Привет'

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

# Вариант 2: разбить по пробелам и соединить
result2 = ''.join(text.split())
print(result2)

код пробела python (код символа пробела в python)

'Привет'

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

Проблема: replace заменяет только обычный пробел (U+0020). Табуляция или неразрывные пробелы останутся. split() без аргументов разбивает по любому пробельному символу, но удаляет все.

Рекомендация: для удаления любых пробелов используйте ''.join(text.split()).

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

text = 'Это   текст   с    лишними  пробелами'
result = ' '.join(text.split())
print(result)

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

'Это текст с лишними пробелами'

Python найти строку (поиск подстроки в строке python)

Проблема: если нужно сохранить переводы строк или табуляцию, split() их тоже схлопнет. Для более тонкого контроля используйте регулярное выражение: re.sub(r' +', ' ', text) заменяет только повторяющиеся пробелы, оставляя другие символы.

Как проверить, состоит ли строка только из пробелов?

text = '   \t  \n'
print(text.isspace())  # True
text2 = ' a '
print(text2.isspace()) # False

Python пробелы (пробелы в python)

isspace() возвращает True, если все символы являются пробельными (включая табуляцию, перевод строки и т.д.).

Как разбить строку по пробелам, сохраняя пустые участки?

text = 'a   b'
print(text.split(' '))   # ['a', '', '', 'b'] – с разделителем-пробелом
print(text.split())      # ['a', 'b'] – без пустых

символ пробел python (символ пробела в python)

Явная передача разделителя ' ' сохраняет пустые строки. split() без аргументов игнорирует пустые.

Как добавить или выровнять пробелы при форматировании?

text = 'Привет'
# Добавить пробелы слева до длины 10
print(text.rjust(10))
# Добавить справа
print(text.ljust(10))
# Центрировать
print(text.center(10))

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

'   Привет'
'Привет   '
'  Привет  '

Python лишние пробелы (удаление лишних пробелов в python)

Методы ljust, rjust, center дополняют строку пробелами до заданной ширины.

Проблема: если ширина меньше длины строки, строка не обрезается. Для обрезки используйте срезы.

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

text = '   слово   '
print(text.lstrip())  # 'слово   '
print(text.rstrip())  # '   слово'

Python длина строки (длина строки в python)

lstrip() и rstrip() работают аналогично strip(), но с одной стороны.

Как заменить пробелы на другой символ (например, подчёркивание)?

text = 'один два три'
result = text.replace(' ', '_')
print(result)  # 'один_два_три'

Простая замена. Для замены любых пробельных символов (табуляция, неразрывные пробелы) используйте re.sub(r'\s+', '_', text).

Как обработать неразрывные пробелы (\u00a0)?

text = 'Привет\u00a0мир'  # неразрывный пробел
print(text.replace('\u00a0', ' '))  # замена на обычный пробел
# или удалить
print(text.replace('\u00a0', ''))

Проблема: стандартные методы strip и split не видят неразрывный пробел как пробельный. isspace() для него возвращает True, но strip без аргументов его не удалит (в Python 3.12+ strip начал учитывать Unicode, но в более старых версиях нет).

Решение: явно указывать strip(' \u00a0') или использовать re.sub(r'\s+', ' ', text) (\s в Python 3 включает неразрывные пробелы с версии 3.7).

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

import re
text = 'Пример\tс табуляцией\nи переводами'
# Заменить любые пробельные последовательности на один пробел
result = re.sub(r'\s+', ' ', text)
print(result)  # 'Пример с табуляцией и переводами'

re.sub позволяет гибко управлять шаблоном. \s соответствует любому пробельному символу (пробел, табуляция, перевод строки, возврат каретки, перевод страницы, неразрывный пробел и др.).

Проблема: если нужно заменить только повторяющиеся пробелы, но не трогать табуляцию, нужно уточнить шаблон: r'[ ]+'.

Расширенные приёмы работы с пробелами

Пример 1: Удаление всех видов пробелов, включая нестандартные Unicode-пробелы.

Пример
import re
text = 'A\u00a0B\u2003C\tD\nE'  # неразрывный пробел, длинное тире (Em Space), табуляция, перевод строки
# \s в Python 3.7+ покрывает большинство пробелов Unicode
result = re.sub(r'\s+', '', text)
print(result)  # 'ABCDE'
'ABCDE'

Пример 2: Сохранение только первых n символов после удаления пробелов.

Пример
text = 'Пр и в е т   м и р'
cleaned = ''.join(text.split())  # 'Приветмир'
first_five = cleaned[:5]
print(first_five)  # 'Приве'
'Приве'

Пример 3: Замена пробелов в середине строки, но не в начале/конце.

Пример
import re
text = '   один два три   '
# Удалить пробелы по краям, затем заменить внутренние на подчёркивание
result = re.sub(r' +', '_', text.strip())
print(result)  # 'один_два_три'
'один_два_три'

Пример 4: Разделение строки по пробелам, но с исключением экранированных пробелов (например, обратный слеш + пробел).

Пример
import re
text = 'a b\\ c d'  # b\ c - один элемент с экранированным пробелом
# Использовать lookbehind: не разбивать если перед пробелом обратный слеш
parts = re.split(r'(?
['a', 'b\\ c', 'd']

Примечание: в реальном тексте обратный слеш может быть удвоен, потребуется дополнительная обработка.

Пример 5: Подсчёт количества пробелов в строке различными способами.

Пример
text = '  a  b  c  '
# Через count
print(text.count(' '))  # 8
# Через sum генератора
print(sum(c == ' ' for c in text))  # 8
# Через re.findall
print(len(re.findall(r' ', text)))  # 8
8
8
8

Пример 6: Удаление пробелов только перед знаками препинания (запятая, точка, вопросительный знак).

Пример
import re
text = 'Привет ,  мир . Как дела ?'
# Удалить пробел перед знаками препинания
result = re.sub(r'\s+([.,!?;:])', r'\1', text)
print(result)  # 'Привет, мир. Как дела?'
'Привет, мир. Как дела?'

Пример 7: Выравнивание текста с помощью f-строк и указания ширины.

Пример
name = 'Анна'
age = 25
# Выравнивание по левому краю, ширина 10
print(f'{name:<10} {age}')
# По правому краю
print(f'{name:>10} {age}')
# Центрирование
print(f'{name:^10} {age}')
Анна       25
      Анна 25
   Анна    25

Пример 8: Использование string.Formatter для настройки пробелов.

Пример
from string import Formatter
fmt = Formatter()
text = fmt.format('{0:>10}', 'Привет')
print(repr(text))  # '   Привет'
'   Привет'

Пробелы в Python - comments

En
Python пробелы (python)