← Назад к вопросам
Как исправить дефект двойных пробелов между словами?
1.0 Junior🔥 61 комментариев
#Pandas и обработка данных#Python и программирование
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как исправить дефект двойных пробелов между словами?
1. Python: регулярные выражения
import re
text = "Hello world how are you"
# Заменяем двойные (или больше) пробелы на одинарный
clean = re.sub(r'\s+', ' ', text)
print(clean) # Hello world how are you
2. Python: простой способ
text = "Hello world how are you"
# Способ 1: split() и join()
clean = ' '.join(text.split())
print(clean) # Hello world how are you
# Способ 2: replace() (если ровно 2 пробела)
while ' ' in text:
text = text.replace(' ', ' ')
print(text) # Hello world how are you
3. SQL: удаление лишних пробелов
-- PostgreSQL
SELECT
user_id,
regexp_replace(comment, '\s+', ' ', 'g') as clean_comment
FROM comments;
-- MySQL
SELECT
user_id,
REGEXP_REPLACE(comment, ' +', ' ') as clean_comment
FROM comments;
-- Или просто TRIM() + replace()
SELECT
user_id,
TRIM(REPLACE(comment, ' ', ' ')) as clean_comment
FROM comments;
4. Pandas
import pandas as pd
import re
df = pd.DataFrame({
'text': ["Hello world", "How are you", "Test data"]
})
# Способ 1: regex
df['clean'] = df['text'].str.replace(r'\s+', ' ', regex=True)
# Способ 2: apply
df['clean'] = df['text'].apply(lambda x: ' '.join(x.split()))
print(df)
# text clean
# 0 Hello world Hello world
# 1 How are you How are you
# 2 Test data Test data
5. Обработка табуляции и переводов строк
import re
text = "Hello\t\tworld\n\nhow\r\nare\tyou"
# Заменяем ВСЕ пробельные символы (пробел, табуляция, перевод строки)
clean = re.sub(r'\s+', ' ', text)
print(clean) # Hello world how are you
6. Ограничение пробелов на краях
import re
text = " Hello world how are you "
# Удаляем пробелы в начале и конце
text = text.strip()
# Заменяем двойные пробелы
text = re.sub(r'\s+', ' ', text)
print(text) # Hello world how are you
print(repr(text)) # 'Hello world how are you' (нет пробелов в начале/конце)
7. Производительность: большие тексты
import re
import time
text = "Hello world how are you " * 10000
# Способ 1: regex (средняя скорость)
start = time.time()
clean1 = re.sub(r'\s+', ' ', text)
print(f"regex: {time.time() - start:.4f}s")
# Способ 2: split/join (БЫСТРЕЕ!)
start = time.time()
clean2 = ' '.join(text.split())
print(f"split/join: {time.time() - start:.4f}s")
# Способ 3: replace в цикле (медленнее)
start = time.time()
clean3 = text
while ' ' in clean3:
clean3 = clean3.replace(' ', ' ')
print(f"while/replace: {time.time() - start:.4f}s")
# Результат (примерный):
# regex: 0.003s
# split/join: 0.001s (БЫСТРЕЕ В 3 РАЗА!)
# while/replace: 0.050s (МЕДЛЕННЕЕ)
8. Функция для очистки текста
import re
def clean_text(text):
# Удаляем пробелы в начале и конце
text = text.strip()
# Заменяем двойные пробелы
text = re.sub(r'\s+', ' ', text)
return text
text = " Hello world how are you "
print(clean_text(text)) # Hello world how are you
9. Комплексная очистка
import re
def normalize_text(text):
# 1. Нижний регистр
text = text.lower()
# 2. Убираем всё кроме букв, цифр, пробелов
text = re.sub(r'[^a-z0-9\s]', '', text)
# 3. Заменяем множественные пробелы на одинарный
text = re.sub(r'\s+', ' ', text)
# 4. Убираем пробелы в начале и конце
text = text.strip()
return text
text = " Hello, World! How Are You? "
print(normalize_text(text)) # hello world how are you
10. Рекомендации
Самый быстрый метод:
' '.join(text.split())
Для полной очистки:
re.sub(r'\s+', ' ', text).strip()
В Pandas (на колонку):
df['text'] = df['text'].str.replace(r'\s+', ' ', regex=True).str.strip()
В SQL:
REGEXP_REPLACE(text, '\\s+', ' ')