Представьте, что у вас есть строка:
"Это очень странное предложение."Наша цель: оставить строго по одному пробелу между словами.
1. Золотой стандарт: Регулярные выражения (`re`)
Самый читаемый и производительный метод. Мы ищем паттерн «два и более пробела» и меняем его на один:
import re
def clean_spaces(text):
return re.sub(r" {2,}", " ", text)
Плюс: Сохраняет пробелы в начале и в конце строки (leading/trailing whitespace), если они там были.
2. Метод «Split + Filter» (Быстрый, но с нюансом)
Популярный хак через разбиение строки:
def clean_spaces(text):
return " ".join(filter(None, text.split(" ")))
Нюанс: Этот метод удалит все пробелы в начале и конце строки. Если вам нужно «причесать» текст для БД, это даже полезно. Но если важна исходная структура — используйте
re.3. Путь джедая: Поиск неподвижной точки (Fixed Point)
В Python 3.14 появился
functools.Placeholder. Это позволяет нам крутить цикл замены replace(" ", " "), пока строка не перестанет меняться:
from functools import partial, Placeholder as _P
def fixedpoint(f, x):
while x != (x := f(x)):
pass
return x
# Заменяем два пробела на один, пока они не кончатся
space_replacer = partial(str.replace, _P, " ", " ")
clean_text = fixedpoint(space_replacer, "Много пробелов")
Это скорее математический трюк, который показывает мощь функционального программирования в Python.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст