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

我有这样的Python代码:

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

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


当前回答

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

其他回答

我使用split()忽略所有空白,使用join()连接 字符串。

sentence = ''.join(' hello  apple  '.split())
print(sentence) #=> 'helloapple'

我更喜欢这种方法,因为它只是一个表达式(不是一个语句)。 它易于使用,并且无需绑定到变量即可使用。

print(''.join(' hello  apple  '.split())) # no need to binding to a variable

“空白”包括空格、制表符和CRLF。所以我们可以使用一个优雅的单行字符串函数str.translate:

Python 3

' hello  apple '.translate(str.maketrans('', '', ' \n\t\r'))

或者如果你想要彻底:

import string
' hello  apple'.translate(str.maketrans('', '', string.whitespace))

Python 2

' hello  apple'.translate(None, ' \n\t\r')

或者如果你想要彻底:

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

小心:

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

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

如果要删除开头和结尾的空白,请使用strip。

>> "  foo bar   ".strip()
"foo bar"