关于trim:删除Python中字符串中的所有空格

Remove all whitespace in a string in Python

我想从一个字符串、两端和单词之间消除所有空白。

我有这个python代码:

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

但这只会消除字符串两边的空白。如何删除所有空白?


如果要删除前导空格和结束空格,请使用str.strip()

1
2
3
sentence = ' hello  apple'
sentence.strip()
>>> 'hello  apple'

如果要删除所有空间,请使用str.replace()

1
2
3
sentence = ' hello  apple'
sentence.replace("","")
>>> 'helloapple'

如果要删除重复的空格,请使用str.split()

1
2
3
sentence = ' hello  apple'
"".join(sentence.split())
>>> 'hello apple'


要只删除空格,请使用str.replace

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

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

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

或正则表达式:

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

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

1
sentence = sentence.strip()

也可以使用lstrip只从字符串的开头删除空白,使用rstrip从字符串的结尾删除空白。


另一种选择是使用正则表达式并匹配这些奇怪的空白字符。以下是一些例子:

删除字符串中的所有空格,即使是单词之间:

1
2
import re
sentence = re.sub(r"\s+","", sentence, flags=re.UNICODE)

删除字符串开头的空格:

1
2
import re
sentence = re.sub(r"^\s+","", sentence, flags=re.UNICODE)

删除字符串末尾的空格:

1
2
import re
sentence = re.sub(r"\s+$","", sentence, flags=re.UNICODE)

删除字符串开头和结尾的空格:

1
2
import re
sentence = re.sub("^\s+|\s+$","", sentence, flags=re.UNICODE)

仅删除重复的空格:

1
2
import re
sentence ="".join(re.split("\s+", sentence, flags=re.UNICODE))

(所有示例都适用于python 2和python 3)


空白包括空格、制表符和CRLF。因此,我们可以使用一个优雅的一行字符串函数translate:

1
2
3
' hello  apple'.translate(None, '
\t
'
)

或者如果你想彻底:

1
2
import string
' hello  apple'.translate(None, string.whitespace)


要从开始和结束删除空白,请使用strip

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

1
2
3
4
' hello  
\tapple'
.translate( { ord(c):None for c in '
\t
'
} )

Mak已经指出了上面的"翻译"方法。这种变化适用于python 3(参见这个问题)。


小心:

strip执行rstrip和lstrip(删除前导和尾随空格、制表符、返回和表单提要,但不会在字符串中间删除它们)。

如果只替换空格和制表符,则可以使用隐藏的CRLF结尾,这些CRLF看起来与您要查找的内容相匹配,但并不相同。


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


此外,条带也有一些变化:

删除字符串开头和结尾的空格:

1
sentence= sentence.strip()

删除字符串开头的空格:

1
sentence = sentence.lstrip()

删除字符串末尾的空格:

1
sentence= sentence.rstrip()

所有三个字符串函数striplstriprstrip都可以取字符串的参数去条带,默认为全空白。这在处理某些特定内容时很有用,例如,只能删除空格而不能删除换行符:

1
2
" 1. Step 1
"
.strip("")

或者在读取字符串列表时可以删除多余的逗号:

1
"1,2,3,".strip(",")