删除字符串中的所有空格


787

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

我有这个Python代码:

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

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


4
您的结果应该是什么样?hello applehelloapple
Mark Byers

4
@JoachimPileborg,我想的不完全是,因为这也涉及单词之间的空白。
wal-o-mat

3
helloapple需要成为我的输出
co2f2e

8
如果错误,请更正我,但是“空白”不是“空格字符”的同义词。标记为正确的当前答案不会删除所有空格。但是,由于它被标记为正确,它一定已经回答了预期的问题?因此,我们应该编辑问题以反映已接受的答案?@Kalanamith是否要删除所有空白或仅删除空格?
AnnanFay

Answers:


1658

如果要删除开头和结尾的空格,请使用str.strip()

sentence = ' hello  apple'
sentence.strip()
>>> 'hello  apple'

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

(注意,这只会删除“常规” ASCII空格字符,' ' U+0020而不会删除任何其他空白

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

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

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

42
此功能的优点是它还会从我从Beautiful Soup收到的html文件中删除“ \ r \ n”。
lsheng

27
我喜欢“” .join(sentence.split()),这会删​​除句子中任何地方的所有空格(空格,制表符,换行符)。

在这里开始。有人可以解释一下为什么print(sentence.join(sentence.split()))结果为“ hello hello appleapple”吗?只想了解此处的代码处理方式。
Yannis Dran

2
@YannisDran检查str.join()文档,在调用sentence.join(str_list)时要求python将str_list中的项目sentence作为分隔符进行联接。
塞德里克·朱利安

1
"".join(sentence.split())确实是规范的解决方案,可以有效地删除所有空格,而不仅仅是空格。马克·拜尔斯Mark Byers)出色答案应该可以代替这个不太适用的答案。
Cecil Curry

263

删除空格,请使用str.replace

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

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

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

或正则表达式:

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

如果只想从头到尾删除空格,则可以使用strip

sentence = sentence.strip()

您还可以lstrip用于仅从字符串的开头rstrip删除空格,并从字符串的结尾删除空格。


注意:您不需要编译步骤,re.sub(和朋友)缓存已编译的模式。另请参阅Emil的答案
安迪·海登

python3:yourstr.translate(str.maketrans('', '', ' \n\t\r'))
deed02392

104

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

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

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

在字符串的开头删除空格:

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

删除字符串末尾的空格:

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

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

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

删除仅重复的空格:

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

(所有示例均可在Python 2和Python 3中使用)


不适用于“ \ u202a1234 \ u202c”。给出相同的输出:u'\ u202a1234 \ u202c'–
Sarang

@Sarang:这些不是空格字符(用谷歌搜索,您会看到),而是“常规标点符号”。我的答案仅涉及删除归类为空白的字符。
EmilStenström'16

这是我在这里看到的唯一删除那些讨厌的unicode空格字符的解决方案,谢谢fam
CapnShanty

41

空格包括空格,制表符和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)

2
这对Unicode空格没有帮助,例如\xc2\xa0
Suzana

5
ans.translate( None, string.whitespace )builtins.TypeError: translate() takes exactly one argument (2 given)为我生产。Docs说该参数是一个转换表,请参阅string.maketrans()。但请参阅下文的Amnon Harel的评论。
user405

2
' hello apple'.translate(str.maketrans('', '', string.whitespace))注意:如果您打算多次执行此操作,最好使变量存储转表。
Shogan Aversa-Druesne

16

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

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

1
该问题特别要求删除所有空白,而不仅仅是在结尾处。请注意。
Shayan Shafiq

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

MaK已经指出了上面的“翻译”方法。而且此变体适用于Python 3(请参阅此Q&A)。


2
谢谢!或者,xxx.translate( { ord(c) :None for c in string.whitespace } )为了彻底。
user405'9

7

小心:

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

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


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

3
问题是也要删除所有包含制表符和换行符的空白,因此此代码段只会删除常规空格。
马克西米利安·彼得斯

3

此外,strip具有一些变化:

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

sentence= sentence.strip()

在字符串的开头删除空格:

sentence = sentence.lstrip()

删除字符串末尾的空格:

sentence= sentence.rstrip()

这三个字符串函数strip lstriprstrip都可以使用要删除的字符串参数,默认为全空格。当您处理某些特殊内容时,这可能会很有帮助,例如,您只能删除空格,而不能删除换行符:

" 1. Step 1\n".strip(" ")

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

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

1

从字符串的两端和单词之间消除所有空格。

>>> import re
>>> re.sub("\s+", # one or more repetition of whitespace
    '', # replace with empty string (->remove)
    ''' hello
...    apple
... ''')
'helloapple'

Python文档:


我知道re之前曾有人提出过建议,但是我发现问题标题的实际答案在所有其他选项中都有些隐藏。
处理
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.