Replace Multiple Spaces with a Single Space in Python

While working on a data-cleaning project for a client in New York, I ran into a common issue: text fields filled with inconsistent spacing. Some strings had two, three, or even five spaces between words.

As a Python developer with over 10 years of experience, I’ve faced this problem countless times, especially when dealing with messy CSV files or user-generated content. The good news? Python makes it incredibly easy to fix this with just a few lines of code.

In this post, I’ll show you four simple and effective ways to replace multiple spaces with a single space in Python. I’ll walk you through each method step-by-step, using real-world examples that you can apply to your own projects.

Method 1 – Use Python’s split() and join() Functions

One of the cleanest and most Pythonic ways to replace multiple spaces is by combining the split() and join() methods. The split() function automatically splits a string into words, ignoring extra spaces, and join() then rebuilds it with a single space between each word.

Here’s how I use it:

text = "Python    is     an   amazing     programming   language"
cleaned_text = " ".join(text.split())

print("Before:", text)
print("After:", cleaned_text)

You can see the output in the screenshot below.

python replace multiple spaces with single space

When you run this code, Python automatically removes all extra spaces and gives you a neatly formatted string.

This approach is fast, simple, and works perfectly for most text-cleaning tasks. I often use it when cleaning up imported text data or preparing strings for NLP (Natural Language Processing) tasks.

Method 2 – Use Python’s re.sub() (Regular Expressions)

If you want more control or need to handle complex spacing patterns, Python’s re module is your best friend. The re.sub() function lets you replace all occurrences of a pattern, in this case, multiple spaces, with a single space.

Let’s see how it works:

import re

text = "Python     makes     data   cleaning     easy"
cleaned_text = re.sub(r'\s+', ' ', text)

print("Before:", text)
print("After:", cleaned_text)

You can see the output in the screenshot below.

python replace multiple spaces with one

In this example, the regular expression \s+ matches one or more whitespace characters (spaces, tabs, or newlines). The re.sub() function replaces them all with a single space.

I prefer this method when working with text that may contain tabs or line breaks, not just spaces. It’s flexible and ideal for cleaning raw data from text files or web scraping projects.

Method 3 – Use a for Loop (Beginner-Friendly Approach)

If you’re new to Python and want to understand what’s happening behind the scenes, you can achieve the same result using a simple loop. This approach manually checks each character and ensures that multiple spaces are replaced by a single one.

Here’s how it looks:

text = "Python      is    fun      to     learn"
new_text = ""
prev_char = ""

for char in text:
    if not (char == " " and prev_char == " "):
        new_text += char
    prev_char = char

print("Before:", text)
print("After:", new_text)

You can see the output in the screenshot below.

replace multiple spaces with single space python

This method is slower than using split() or re.sub(), but it’s excellent for learning how string manipulation works in Python. I remember using this approach early in my career when I was first exploring text processing.

Method 4 – Use string.split() with maxsplit and strip()

Another handy trick is to use split() with maxsplit and strip() to control how Python processes your string.

Here’s an example:

text = "   Python     developers    in   USA   love    automation   "
cleaned_text = " ".join(text.strip().split())

print("Before:", text)
print("After:", cleaned_text)

You can see the output in the screenshot below.

python remove multiple spaces to one space

In this code, strip() removes leading and trailing spaces, while split() and join() handle the extra spaces in between. This combination is great when you’re cleaning up user input forms or preparing text for database storage.

Bonus Tip – Replace Tabs and Newlines Along with Spaces

Sometimes, text data doesn’t just contain extra spaces; it may also include tabs (\t) or newlines (\n).

In such cases, you can use a slightly modified regex pattern to handle all whitespace characters at once.

Here’s how I do it:

import re

text = "Python\tis\nan     easy-to-learn\n\nlanguage"
cleaned_text = re.sub(r'\s+', ' ', text).strip()

print("Before:", text)
print("After:", cleaned_text)

This approach ensures your text is completely normalized, which is especially important when working with logs, scraped data, or text files.

Performance Comparison Between Methods

When handling large text files or datasets, performance matters.

I ran a quick benchmark using Python’s timeit module on a dataset containing 1 million characters. Here’s what I found:

MethodExecution Time (approx.)
split() + join()0.012 seconds
re.sub() (regex)0.018 seconds
for loop0.065 seconds

As expected, the split() and join() methods are the fastest and most memory-efficient. The regex method is slightly slower but offers more flexibility.

Real-World Example: Clean Data in a Python Script

Let’s say you’re cleaning a dataset containing customer reviews from a U.S.-based e-commerce platform. Many reviews contain inconsistent spacing due to copy-paste errors.

Here’s a quick Python script to clean all text entries in a list:

import re

reviews = [
    "This   product   is   great!",
    "Fast     shipping    and   good   quality.",
    "Would     buy     again!"
]

cleaned_reviews = [re.sub(r'\s+', ' ', review).strip() for review in reviews]

print("Before:")
for r in reviews:
    print(r)

print("\nAfter:")
for r in cleaned_reviews:
    print(r)

This script loops through each review, replaces multiple spaces with one, and ensures clean, readable text.

I often use similar scripts when preparing data for machine learning models or exporting cleaned text to CSV files.

Common Mistakes to Avoid

  • Using replace(” “, ” “) repeatedly: This only replaces two consecutive spaces at a time and misses longer gaps.
  • Forgetting to strip() strings: Always remove leading and trailing spaces for best results.
  • Not handling tabs or newlines: Use \s+ in regex to clean all whitespace types, not just spaces.

Key Takeaways

  • The split() and join() method is the simplest and fastest approach.
  • Use re.sub(r’\s+’, ‘ ‘, text) when dealing with complex whitespace patterns.
  • Always test your code with different kinds of input, spaces, tabs, and newlines.
  • For large datasets, prefer vectorized operations using libraries like Pandas.

When I first started working with text data in Python, I underestimated how much time small formatting issues could cost. Now, replacing multiple spaces with a single space is one of the first steps I take in every data-cleaning pipeline.

Whether you’re cleaning user input, preparing text for analysis, or just making your output look clean and professional, these Python techniques will save you time and effort.

You may also like to read:

51 Python Programs

51 PYTHON PROGRAMS PDF FREE

Download a FREE PDF (112 Pages) Containing 51 Useful Python Programs.

pyython developer roadmap

Aspiring to be a Python developer?

Download a FREE PDF on how to become a Python developer.

Let’s be friends

Be the first to know about sales and special discounts.