How do I trim whitespace from a string?


Python Problem Overview

How do I remove leading and trailing whitespace from a string in Python?

" Hello world " --> "Hello world"
" Hello world"  --> "Hello world"
"Hello world "  --> "Hello world"
"Hello world"   --> "Hello world"

Python Solutions

Solution 1 - Python

To remove all whitespace surrounding a string, use .strip(). Examples:

>>> ' Hello '.strip()
>>> ' Hello'.strip()
>>> 'Bob has a cat'.strip()
'Bob has a cat'
>>> '   Hello   '.strip()  # ALL consecutive spaces at both ends removed

Note that str.strip() removes all whitespace characters, including tabs and newlines. To remove only spaces, specify the specific character to remove as an argument to strip:

>>> "  Hello\n  ".strip(" ")

To remove only one space at most:

def strip_one_space(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s

>>> strip_one_space("   Hello ")
'  Hello'

Solution 2 - Python

As pointed out in answers above


will remove all the leading and trailing whitespace characters such as \n, \r, \t, \f, space .

For more flexibility use the following

  • Removes only leading whitespace chars: my_string.lstrip()
  • Removes only trailing whitespace chars: my_string.rstrip()
  • Removes specific whitespace chars: my_string.strip('\n') or my_string.lstrip('\n\r') or my_string.rstrip('\n\t') and so on.

More details are available in the docs.

Solution 3 - Python

strip is not limited to whitespace characters either:

# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')

Solution 4 - Python

This will remove all leading and trailing whitespace in myString:


Solution 5 - Python

You want strip():

myphrases = [" Hello ", " Hello", "Hello ", "Bob has a cat"]

for phrase in myphrases:

Solution 6 - Python

This can also be done with a regular expression

import re

input  = " Hello "
output = re.sub(r'^\s+|\s+$', '', input)
# output = 'Hello'

Solution 7 - Python

Well seeing this thread as a beginner got my head spinning. Hence came up with a simple shortcut.

Though str.strip() works to remove leading & trailing spaces it does nothing for spaces between characters.

words=input("Enter the word to test")
# If I have a user enter discontinous threads it becomes a problem
# input = "   he llo, ho w are y ou  "
# output "he llo, ho w are y ou" - only leading & trailing spaces are removed 

Instead use str.replace() to make more sense plus less error & more to the point. The following code can generalize the use of str.replace()

def whitespace(words):
    r=words.replace(' ','') # removes all whitespace
    n=r.replace(',','|') # other uses of replace
    return n
def run():
    words=input("Enter the word to test") # take user input
    m=whitespace(words) #encase the def in run() to imporve usability on various functions
    o=m.count('f') # for testing
    return m,o
output- ('hello|howareyou', 0)

Can be helpful while inheriting the same in diff. functions.

Solution 8 - Python

In order to remove "Whitespace" which causes plenty of indentation errors when running your finished code or programs in Pyhton. Just do the following;obviously if Python keeps telling that the error(s) is indentation in line 1,2,3,4,5, etc..., just fix that line back and forth.

However, if you still get problems about the program that are related to typing mistakes, operators, etc, make sure you read why error Python is yelling at you:

The first thing to check is that you have your indentation right. If you do, then check to see if you have mixed tabs with spaces in your code.

Remember: the code will look fine (to you), but the interpreter refuses to run it. If you suspect this, a quick fix is to bring your code into an IDLE edit window, then choose Edit..."Select All from the menu system, before choosing Format..."Untabify Region. If you’ve mixed tabs with spaces, this will convert all your tabs to spaces in one go (and fix any indentation issues).

Solution 9 - Python

I could not find a solution to what I was looking for so I created some custom functions. You can try them out.

def cleansed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    # return trimmed(s.replace('"', '').replace("'", ""))
    return trimmed(s)

def trimmed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    ss = trim_start_and_end(s).replace('  ', ' ')
    while '  ' in ss:
        ss = ss.replace('  ', ' ')
    return ss

def trim_start_and_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    return trim_start(trim_end(s))

def trim_start(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in s:
        if c is not ' ' or len(chars) > 0:
    return "".join(chars).lower()

def trim_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in reversed(s):
        if c is not ' ' or len(chars) > 0:
    return "".join(reversed(chars)).lower()

s1 = '  b Beer '
s2 = 'Beer  b    '
s3 = '      Beer  b    '
s4 = '  bread butter    Beer  b    '

cdd = trim_start(s1)
cddd = trim_end(s2)
clean1 = cleansed(s3)
clean2 = cleansed(s4)

print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s1, len(s1), cdd, len(cdd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s2, len(s2), cddd, len(cddd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s3, len(s3), clean1, len(clean1)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s4, len(s4), clean2, len(clean2)))

Solution 10 - Python

If you want to trim specified number of spaces from left and right, you could do this:

def remove_outer_spaces(text, num_of_leading, num_of_trailing):
    text = list(text)
    for i in range(num_of_leading):
        if text[i] == " ":
            text[i] = ""

    for i in range(1, num_of_trailing+1):
        if text[-i] == " ":
            text[-i] = ""
    return ''.join(text)

txt1 = "   MY name is     "
print(remove_outer_spaces(txt1, 1, 1))  # result is: "  MY name is    "
print(remove_outer_spaces(txt1, 2, 3))  # result is: " MY name is  "
print(remove_outer_spaces(txt1, 6, 8))  # result is: "MY name is"

Solution 11 - Python

> How do I remove leading and trailing whitespace from a string in Python?

So below solution will remove leading and trailing whitespaces as well as intermediate whitespaces too. Like if you need to get a clear string values without multiple whitespaces.

>>> str_1 = '     Hello World'
>>> print(' '.join(str_1.split()))
Hello World
>>> str_2 = '     Hello      World'
>>> print(' '.join(str_2.split()))
Hello World
>>> str_3 = 'Hello World     '
>>> print(' '.join(str_3.split()))
Hello World
>>> str_4 = 'Hello      World     '
>>> print(' '.join(str_4.split()))
Hello World
>>> str_5 = '     Hello World     '
>>> print(' '.join(str_5.split()))
Hello World
>>> str_6 = '     Hello      World     '
>>> print(' '.join(str_6.split()))
Hello World
>>> str_7 = 'Hello World'
>>> print(' '.join(str_7.split()))
Hello World

As you can see this will remove all the multiple whitespace in the string(output is Hello World for all). Location doesn't matter. But if you really need leading and trailing whitespaces, then strip() would be find.

Solution 12 - Python

One way is to use the .strip() method (removing all surrounding whitespaces)

str = "  Hello World  "
str = str.strip()
**result: str = "Hello World"**

Note that .strip() returns a copy of the string and doesn't change the underline object (since strings are immutable).

Should you wish to remove all whitespace (not only trimming the edges):

str = ' abcd efgh ijk  '
str = str.replace(' ', '')
**result: str = 'abcdefghijk'

Solution 13 - Python

I wanted to remove the too-much spaces in a string (also in between the string, not only in the beginning or end). I made this, because I don't know how to do it otherwise:

string = "Name : David         Account: 1234             Another thing: something  " 

ready = False
while ready == False:
    pos = string.find("  ")
    if pos != -1:
       string = string.replace("  "," ")
       ready = True

This replaces double spaces in one space until you have no double spaces any more


All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionrobertView Question on Stackoverflow
Solution 1 - PythonBrianView Answer on Stackoverflow
Solution 2 - PythonMudit JainView Answer on Stackoverflow
Solution 3 - PythonDrew NoakesView Answer on Stackoverflow
Solution 4 - PythonDeniz DoganView Answer on Stackoverflow
Solution 5 - PythonvezultView Answer on Stackoverflow
Solution 6 - PythonJames McGuiganView Answer on Stackoverflow
Solution 7 - PythonChidhvilasView Answer on Stackoverflow
Solution 8 - PythonNYCRodriguezView Answer on Stackoverflow
Solution 9 - PythonMitchView Answer on Stackoverflow
Solution 10 - PythonDounchanView Answer on Stackoverflow
Solution 11 - PythonKushan GunasekeraView Answer on Stackoverflow
Solution 12 - Pythonoriel9pView Answer on Stackoverflow
Solution 13 - PythonMarjanView Answer on Stackoverflow