← Назад к вопросам

Как исправить дефект двойных пробелов между словами?

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+', ' ')