删除字符串中的所有空格

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

我有这个Python代码:

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

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

2503158 次浏览

要删除只有空格,请使用#0

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

要删除所有空格字符(空格、制表符、换行符等),您可以使用#0然后#1

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

或正则表达式:

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

如果您只想删除开头和结尾的空格,您可以使用#0

sentence = sentence.strip()

您还可以使用#0仅从字符串的开头删除空格,并使用#1从字符串的末尾删除空格。

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

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

如果要删除前导和结尾空格,请使用#0

>>> "  hello  apple  ".strip()'hello  apple'

如果要删除所有空格字符,请使用#0(注意,这只删除了“普通”ASCII空格字符#1,但不删除任何其他空格

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

如果要删除重复的空格,请使用#0后跟str.join()

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

小心:

strip做了一个RBROT和LBROT(删除前导和尾随空格、制表符、返回和表单提要,但不会删除它们在字符串中间)。

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

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

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

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

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

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

删除字符串末尾的空格:

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

删除字符串的开始和结束中的空格:

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

仅删除重复空格:

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

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

“空白”包括空间、制表符和CRLF。所以我们可以使用一个优雅的单行字符串函数是#0

python3

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

如果你想彻底:

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

python2

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

如果你想彻底:

import string' hello  apple'.translate(None, string.whitespace)
' hello  \n\tapple'.translate({ord(c):None for c in ' \n\t\r'})

MaK已经指出了上面的“翻译”方法。这种变体适用于Python 3(参见本次问答)。

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

此外,有一些变体:

删除字符串开始和结束中的空格:

sentence= sentence.strip()

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

sentence = sentence.lstrip()

删除字符串末尾的空格:

sentence= sentence.rstrip()

所有三个字符串函数striplstriprstrip都可以接受要删除的字符串参数,默认值为全部空格。这在您处理特定内容时很有帮助,例如,您可以仅删除空格但不能删除换行符:

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

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

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

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

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

python文档:

试试这个…而不是使用re,我认为使用带条的分裂要好得多

def my_handle(self):sentence = ' hello  apple  '' '.join(x.strip() for x in sentence.split())#hello apple''.join(x.strip() for x in sentence.split())#helloapple

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

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

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

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

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

# Import regular expression moduleimport re
# Initialize stringa = "     foo      bar   "
# First replace any number of spaces with a single spacea = re.sub(' +', ' ', a)
# Then strip any leading and trailing spaces.a = a.strip()
# Show resultsprint(a)

我发现这对我来说是最好的:

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'

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