在Python中删除字符串中的所有空格

co2*_*f2e 715 python trim removing-whitespace

我想从字符串,两端和单词之间消除所有空格.

我有这个Python代码:

def my_handle(self):
    sentence = ' hello  apple  '
    sentence.strip()
Run Code Online (Sandbox Code Playgroud)

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

Céd*_*ien 1533

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

sentence = ' hello  apple'
sentence.strip()
>>> 'hello  apple'
Run Code Online (Sandbox Code Playgroud)

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

sentence = ' hello  apple'
sentence.replace(" ", "")
>>> 'helloapple'
Run Code Online (Sandbox Code Playgroud)

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

sentence = ' hello  apple'
" ".join(sentence.split())
>>> 'hello apple'
Run Code Online (Sandbox Code Playgroud)

  • 这个功能的优点在于它还从我从Beautiful Soup收到的html文件中删除了'\ r \n'. (36认同)
  • 我喜欢"".join(sentence.split()),这会从句子中的任何位置删除所有空格(空格,制表符,换行符). (22认同)
  • `"".join(sentence.split())` 确实是规范的解决方案,有效地去除了*所有*空格而不仅仅是空格。[Mark Byers](/sf/users/4338211/)' [优秀答案](/sf/answers/578908711/) 可能应该被接受来代替这个不太适用的答案。 (6认同)
  • .strip()我猜 (4认同)
  • @Twinkle哪个功能???请告诉...我在使用BeautifulSoap时遇到困难 (3认同)
  • @YannisDran检查[str.join()文档](https://docs.python.org/3/library/stdtypes.html#str.join),当你调用`sentence.join(str_list)`你问python将str_list中的项与`sentence`作为分隔符连接起来. (2认同)

Mar*_*ers 244

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

sentence = sentence.replace(' ', '')
Run Code Online (Sandbox Code Playgroud)

要删除所有空格字符(空格,制表符,换行符,等等),你可以使用splitjoin:

sentence = ''.join(sentence.split())
Run Code Online (Sandbox Code Playgroud)

或正则表达式:

import re
pattern = re.compile(r'\s+')
sentence = re.sub(pattern, '', sentence)
Run Code Online (Sandbox Code Playgroud)

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

sentence = sentence.strip()
Run Code Online (Sandbox Code Playgroud)

您还可以使用lstrip仅从字符串的开头rstrip删除空格,并从字符串末尾删除空格.


Emi*_*röm 89

另一种方法是使用正则表达式并匹配这些奇怪的空白字符.这里有些例子:

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

import re
sentence = re.sub(r"\s+", "", sentence, flags=re.UNICODE)
Run Code Online (Sandbox Code Playgroud)

删除字符串BEGINNING中的空格:

import re
sentence = re.sub(r"^\s+", "", sentence, flags=re.UNICODE)
Run Code Online (Sandbox Code Playgroud)

删除字符串END中的空格:

import re
sentence = re.sub(r"\s+$", "", sentence, flags=re.UNICODE)
Run Code Online (Sandbox Code Playgroud)

删除BEGINNING和字符串END中的空格:

import re
sentence = re.sub("^\s+|\s+$", "", sentence, flags=re.UNICODE)
Run Code Online (Sandbox Code Playgroud)

仅删除DUPLICATE空格:

import re
sentence = " ".join(re.split("\s+", sentence, flags=re.UNICODE))
Run Code Online (Sandbox Code Playgroud)

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


MaK*_*MaK 36

空格包括空格,制表符和CRLF.因此,一个优雅的一行,我们可以使用字符串函数是翻译:

' hello  apple'.translate(None, ' \n\t\r')
Run Code Online (Sandbox Code Playgroud)

或者如果你想彻底:

import string
' hello  apple'.translate(None, string.whitespace)
Run Code Online (Sandbox Code Playgroud)

  • `ans.translate( None, string.whitespace )` 只产生 `builtins.TypeError: translate() 对我来说只需要一个参数(给定 2 个)`。文档说该参数是一个转换表,请参阅 string.maketrans()。但请参阅下面 Amnon Harel 的评论。 (5认同)
  • 这对像 `\xc2\xa0` 这样的 Unicode 空白没有帮助 (2认同)
  • `' hello apple'.translate(str.maketrans('', '', string.whitespace))` 注意:如果您打算多次执行此操作,最好创建一个变量来存储 trans-table。 (2认同)

wal*_*mat 17

要从开头和结尾删除空格,请使用strip.

>> "  foo bar   ".strip()
"foo bar"
Run Code Online (Sandbox Code Playgroud)

  • 该问题特别要求删除所有空白,而不仅仅是末尾的空白。请注意。 (2认同)

Amn*_*rel 6

' hello  \n\tapple'.translate( { ord(c):None for c in ' \n\t\r' } )
Run Code Online (Sandbox Code Playgroud)

MaK已经指出了上面的"翻译"方法.这种变体适用于Python 3(参见此问答).

  • 谢谢!或者,`xxx.translate({ord(c):对于string.whitespace中的c为None})`为彻底性. (2认同)

yan*_*nce 5

小心:

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

如果仅替换空格和制表符,则最终可能会出现隐藏的CRLF,这些CRLF看起来与您要查找的内容匹配,但并不相同。


Ann*_*nna 5

此外,strip有一些变化:

删除字符串的 BEGINNING 和 END 中的空格:

sentence= sentence.strip()
Run Code Online (Sandbox Code Playgroud)

删除字符串开头的空格:

sentence = sentence.lstrip()
Run Code Online (Sandbox Code Playgroud)

删除字符串末尾的空格:

sentence= sentence.rstrip()
Run Code Online (Sandbox Code Playgroud)

三个字符串函数都可以strip lstrip,并且rstrip可以带参数的字符串进行剥离,默认全是空格。这在您处理特定内容时会很有帮助,例如,您可以只删除空格而不能删除换行符:

" 1. Step 1\n".strip(" ")
Run Code Online (Sandbox Code Playgroud)

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

"1,2,3,".strip(",")
Run Code Online (Sandbox Code Playgroud)


nao*_*ita 5

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

sentence = ''.join(' hello  apple  '.split())
print(sentence) #=> 'helloapple'
Run Code Online (Sandbox Code Playgroud)

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

print(''.join(' hello  apple  '.split())) # no need to binding to a variable
Run Code Online (Sandbox Code Playgroud)