Пробелы в 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()) # FalsePython пробелы (пробелы в 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)) # ' Привет'
' Привет'