我想消除字符串的所有空白,在两端和单词之间。

我有这样的Python代码:

def my_handle(self):
    sentence = ' hello  apple  '
    sentence.strip()

但这只是消除了字符串两侧的空白。如何删除所有空白?


当前回答

如果只删除空格,请使用str.replace:

sentence = sentence.replace(' ', '')

要删除所有空白字符(空格,制表符,换行符等),可以使用split then join:

sentence = ''.join(sentence.split())

或者正则表达式:

import re
pattern = re.compile(r'\s+')
sentence = re.sub(pattern, '', sentence)

如果你只想从开头和结尾删除空白,你可以使用strip:

sentence = sentence.strip()

还可以使用lstrip删除字符串开头的空白,使用rstrip删除字符串末尾的空白。

其他回答

我发现这个方法最适合我:

test_string = '  test   a   s   test '
string_list = [s.strip() for s in str(test_string).split()]
final_string = ' '.join(string_array)
# final_string: 'test a s test'

它删除了任何空白,制表符等。

小心:

Strip执行rstrip和lstrip(删除开头和结尾空格、制表符、返回值和表单提要,但不删除字符串中间的空格)。

如果你只替换空格和制表符,你最终会得到隐藏的crlf,它们看起来与你正在寻找的内容相匹配,但并不相同。

import re    
sentence = ' hello  apple'
re.sub(' ','',sentence) #helloworld (remove all spaces)
re.sub('  ',' ',sentence) #hello world (remove double spaces)

如果你想删除开头和结尾空格,使用str.strip():

>>> "  hello  apple  ".strip()
'hello  apple'

如果你想删除所有空格字符,使用str.replace()(注意,这只删除“正常的”ASCII空格字符' ' U+0020,而不删除任何其他空白字符):

>>> "  hello  apple  ".replace(" ", "")
'helloapple'

如果你想删除重复的空格,使用str.split()后面跟着str.join():

>>> " ".join("  hello  apple  ".split())
'hello apple'
' hello  \n\tapple'.translate({ord(c):None for c in ' \n\t\r'})

MaK已经在上面指出了“翻译”方法。这种变化适用于Python 3(请参阅此问答)。