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

我有这样的Python代码:

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

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


当前回答

在下面的脚本中,我们导入正则表达式模块,用于用一个空格替换一个或多个空格。这确保了内部多余的空间被删除。然后使用strip()函数删除前导和尾随空格。

# Import regular expression module
import re

# Initialize string
a = "     foo      bar   "

# First replace any number of spaces with a single space
a = re.sub(' +', ' ', a)

# Then strip any leading and trailing spaces.
a = a.strip()

# Show results
print(a)

其他回答

' hello  \n\tapple'.translate({ord(c):None for c in ' \n\t\r'})

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

在下面的脚本中,我们导入正则表达式模块,用于用一个空格替换一个或多个空格。这确保了内部多余的空间被删除。然后使用strip()函数删除前导和尾随空格。

# Import regular expression module
import re

# Initialize string
a = "     foo      bar   "

# First replace any number of spaces with a single space
a = re.sub(' +', ' ', a)

# Then strip any leading and trailing spaces.
a = a.strip()

# Show results
print(a)

“空白”包括空格、制表符和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)

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

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'

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