Обработка текстовых данных: удаление ненужных пробелов средствами языка Python
Способы удаления лишних пробелов в Python
Наиболее эффективное решение для удаления лишних пробелов в строке основано на комбинации регулярного выражения и метода strip. Оно позволяет заменить множественные пробельные символы на один пробел и обрезать краевые пробелы. Пример:
import re
text = " Hello, world! \n "
clean = re.sub(r'\s+', ' ', text).strip()
print(repr(clean)) # 'Hello, world!'заменить текст python (замена подстроки в строке в python)
В этом коде re.sub(r'\s+', ' ', text) заменяет любые последовательности пробельных символов (пробелы, табуляции, переводы строк) на один пробел. Затем strip() удаляет начальные и конечные пробелы. Такой подход работает быстро и универсально.
Как удалить пробелы в начале и конце строки?
Методы strip(), lstrip(), rstrip() позволяют убрать пробельные символы только с краев строки.
s = " текст "
print(s.strip()) # "текст"
print(s.lstrip()) # "текст "
print(s.rstrip()) # " текст"Python заменить число (замена числа в python (например, в строке))
Как заменить множественные пробелы внутри строки одним?
Стандартный способ через split() и join():
s = "один два три"
result = ' '.join(s.split())
print(result) # "один два три"Python часть текста (извлечение подстроки из строки в python)
Метод split() без аргумента разбивает строку по любому количеству пробельных символов (пробелы, табуляции, переводы строк). Затем join собирает части через один пробел.
Альтернатива с регулярным выражением:
import re
s = "один два три"
result = re.sub(r'\s+', ' ', s)
print(result) # "один два три"Print split python (использование split с print в python)
Как удалить все пробелы из строки?
Для удаления всех обычных пробелов применяется replace(' ', ''):
s = "текст с пробелами"
print(s.replace(' ', '')) # "текстспробелами"код пробела python (код символа пробела в python)
Если нужно удалить любые пробельные символы (в том числе табуляции, переводы), используйте re.sub(r'\s', '', s):
import re
s = "текст\tс\nпробелами"
print(re.sub(r'\s', '', s)) # "текстспробелами"Python количество пробелов (количество пробелов в строке python)
Как удалить множественные пробелы, но сохранить переводы строк?
Для обработки многострочного текста без потери переносов строк подходит регулярное выражение, которое заменяет только повторяющиеся пробелы (не символы новой строки):
import re
text = "строка1\n строка2 \n строка3"
clean = re.sub(r'[^\S\r\n]+', ' ', text).strip()
print(repr(clean)) # 'строка1\n строка2\n строка3'Объяснение: [^\S\r\n] - это отрицание, означает любой пробельный символ, кроме \r и \n. Знак + указывает на одно или более повторений. Таким образом, последовательности пробелов, табуляций и т.п. заменяются на один пробел, а переносы строк остаются неизменными.
Дополнительные примеры с различными пробельными символами и граничными случаями.
Работа с табуляцией и другими whitespace
import re
# Строка с табуляцией, переводами строк и пробелами
text = "\t\tслово1\t\tслово2\n\t\tслово3\n"
# Вариант 1: замена всех пробельных последовательностей на один пробел
clean1 = re.sub(r'\s+', ' ', text).strip()
print('Результат 1:', repr(clean1))
# Результат 1: 'слово1 слово2 слово3'
# Вариант 2: удаление только пробелов (сохраняются табуляции и переносы)
clean2 = text.replace(' ', '')
print('Результат 2:', repr(clean2))
# Результат 2: '\t\tслово1\t\tслово2\n\t\tслово3\n'
# Вариант 3: удаление только начальных и конечных пробелов у каждой строки
lines = [line.strip() for line in text.splitlines()]
clean3 = '\n'.join(lines)
print('Результат 3:', repr(clean3))
# Результат 3: 'слово1\t\tслово2\nслово3'Сохранение только одного пробела между словами, но удаление краевых
text = " Привет мир! как дела? "
# Использование split() + join()
result = ' '.join(text.split())
print(repr(result)) # 'Привет мир! как дела?'
# Результат: лишние пробелы убраны, но все символы, отличные от пробелов, считаются разделителями.Удаление лишних пробелов в начале каждой строки многострочного текста
text = "\n Первая строка \n Вторая строка \n "
# Чтобы убрать отступы в начале каждой строки, но сохранить внутренние пробелы:
clean = '\n'.join(line.lstrip() for line in text.splitlines())
print(repr(clean))
# Результат: 'Первая строка \nВторая строка \n'
# Примечание: lstrip() удаляет пробелы только в начале, внутри строки остаются двойные пробелы.Использование strip() с аргументом для удаления конкретных символов
s = "...текст..."
# Удаление точек в начале и конце
print(s.strip('.')) # "текст"
# Удаление только пробелов, но не табуляций
s2 = "\t текст \t"
print(s2.strip(' ')) # "\t текст\t" - табуляции остались
# Для удаления и пробелов, и табуляций используйте strip() без аргумента.Обработка текста с неразрывными пробелами (U+00A0)
import re
text = "слово\u00a0\u00a0слово" # неразрывные пробелы
# Обычный replace(' ', '') не сработает
clean = re.sub(r'[\s\u00a0]+', ' ', text).strip()
print(repr(clean)) # 'слово слово'