如何从Python字符串中修剪空格?

时间:2009-04-17 19:16:07

标签: python string trim

如何从Python中的字符串中删除前导空格和尾随空格?

例如:

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"

12 个答案:

答案 0 :(得分:1608)

只有一个空间,还是所有这样的空间?如果是第二个,则字符串已经有.strip()方法:

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

如果您只需删除一个空格,则可以使用:

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

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

另请注意,str.strip()也会删除其他空格字符(例如标签和换行符)。要仅删除空格,可以指定要删除的字符作为strip的参数,即:

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

答案 1 :(得分:247)

如上面的答案所指出

myString.strip()

将删除所有前导和尾随空格字符,例如\ n,\ r \ n,\ t \ t,\ t \ t \ t,空格。

为了更加灵活,请使用以下

  • 仅移除前导空白字符:myString.lstrip()
  • 仅移除尾随空白字符:myString.rstrip()
  • 移除特定空白字符:myString.strip('\n')myString.lstrip('\n\r')myString.rstrip('\n\t'),依此类推。

docs

中提供了更多详细信息

答案 2 :(得分:115)

strip不限于空格字符:

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

答案 3 :(得分:49)

这将删除myString所有前导和尾随空格:

myString.strip()

答案 4 :(得分:21)

你想要strip():

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

for phrase in myphrases:
    print phrase.strip()

答案 5 :(得分:3)

这也可以用正则表达式完成

import re

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

答案 6 :(得分:1)

作为初学者,这个线程让我很头疼。因此想出了一个简单的快捷方式。

尽管 str.strip()可以删除前导空格和尾随空格,但字符之间的空格不起作用。

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  "
n=words.strip()
print(n)
# output "he llo, ho w are y ou" - only leading & trailing spaces are removed 

取而代之的是 使用str.replace() 来使内容更有意义,同时减少错误,甚至更多。 以下代码可以概括使用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
print(run())
output- ('hello|howareyou', 0)

在diff中继承相同内容时可能会有所帮助。功能。

答案 7 :(得分:1)

为了删除在Pyhton中运行完成的代码或程序时引起大量缩进错误的“空白”。只需执行以下操作;显然,如果Python一直在告诉错误是第1,2,3,4,5等行中的缩进...,只需来回修正该行即可。

但是,如果仍然遇到与键入错误,运算符等有关的程序问题,请确保已阅读错误Python为何对您大吼大叫:

首先要检查的是您拥有 缩进权。如果这样做,请检查是否有 在代码中混合使用制表符和空格。

记住:代码 (对您而言)将看起来不错,但解释器拒绝运行它。如果 您对此表示怀疑,一种快速的解决方法是将您的代码放入 在“ IDLE编辑”窗口中,然后选择“编辑...”。 菜单系统,然后选择“格式...”“取消制表区域”。 如果您将制表符与空格混合使用,这将转换您所有的 一键切换到空格(并解决所有缩进问题)。

答案 8 :(得分:0)

我想删除字符串中太多的空格(不仅在字符串的开头或结尾,而且在字符串之间)。我这样做是因为我不知道该怎么做:

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

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

这将替换一个空格中的双精度空格,直到不再有双精度空格

答案 9 :(得分:0)

我找不到想要的解决方案,所以我创建了一些自定义函数。您可以尝试一下。

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:
            chars.append(c)
    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:
            chars.append(c)
    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)))

答案 10 :(得分:0)

如果您要从左侧和右侧修剪指定数量的空格,可以执行以下操作:

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] = ""
        else:
            break

    for i in range(1, num_of_trailing+1):
        if text[-i] == " ":
            text[-i] = ""
        else:
            break
    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"

答案 11 :(得分:0)

如何在Python中从字符串中删除开头和结尾的空格?

因此,以下解决方案也将删除前导和尾随空格以及中间空格。就像您需要获取不带多个空格的清晰字符串值一样。

>>> 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

如您所见,这将删除字符串中的所有多个空格(所有输出均为Hello World)。位置无关紧要。但是,如果您确实需要开头和结尾的空格,则可以找到strip()