如何从字符串中删除所有空格

问题描述 投票:151回答:10

如何删除python字符串中的所有空格?例如,我希望像strip my spaces这样的字符串变成stripmyspaces,但我似乎无法用strip()实现这一点:

>>> 'strip my spaces'.strip()
'strip my spaces'
python python-3.x spaces strip
10个回答
272
投票

利用没有sep参数的str.split行为:

>>> s = " \t foo \n bar "
>>> "".join(s.split())
'foobar'

如果您只想删除空格而不是所有空格:

>>> s.replace(" ", "")
'\tfoo\nbar'

过早优化

即使效率不是主要目标 - 编写明确的代码 - 这里是一些初始时间:

$ python -m timeit '"".join(" \t foo \n bar ".split())'
1000000 loops, best of 3: 1.38 usec per loop
$ python -m timeit -s 'import re' 're.sub(r"\s+", "", " \t foo \n bar ")'
100000 loops, best of 3: 15.6 usec per loop

请注意,正则表达式是缓存的,因此它并不像您想象的那么慢。事先编译它会有所帮助,但只有在你多次调用时才会在实践中起作用:

$ python -m timeit -s 'import re; e = re.compile(r"\s+")' 'e.sub("", " \t foo \n bar ")'
100000 loops, best of 3: 7.76 usec per loop

即使re.sub慢了11.3倍,记住你的瓶颈肯定在其他地方。大多数程序都不会注意到这三种选择中的任何一种。


0
投票

过滤列表的标准技术适用,尽管它们不如split/jointranslate方法有效。

我们需要一组空格:

>>> import string
>>> ws = set(string.whitespace)

filter内置:

>>> "".join(filter(lambda c: c not in ws, "strip my spaces"))
'stripmyspaces'

列表理解(是的,使用括号:见下面的基准):

>>> import string
>>> "".join([c for c in "strip my spaces" if c not in ws])
'stripmyspaces'

折叠:

>>> import functools
>>> "".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))
'stripmyspaces'

基准测试:

>>> from timeit import timeit
>>> timeit('"".join("strip my spaces".split())')
0.17734256500003198
>>> timeit('"strip my spaces".translate(ws_dict)', 'import string; ws_dict = {ord(ws):None for ws in string.whitespace}')
0.457635745999994
>>> timeit('re.sub(r"\s+", "", "strip my spaces")', 'import re')
1.017787621000025

>>> SETUP = 'import string, operator, functools, itertools; ws = set(string.whitespace)'
>>> timeit('"".join([c for c in "strip my spaces" if c not in ws])', SETUP)
0.6484303600000203
>>> timeit('"".join(c for c in "strip my spaces" if c not in ws)', SETUP)
0.950212219999969
>>> timeit('"".join(filter(lambda c: c not in ws, "strip my spaces"))', SETUP)
1.3164566040000523
>>> timeit('"".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))', SETUP)
1.6947649049999995

52
投票
>>> import re
>>> re.sub(r'\s+', '', 'strip my spaces')
'stripmyspaces'

还处理你没想到的任何空白字符(相信我,有很多)。


27
投票

或者,

"strip my spaces".translate( None, string.whitespace )

这是Python3版本:

"strip my spaces".translate(str.maketrans('', '', string.whitespace))

12
投票

最简单的是使用替换:

"foo bar\t".replace(" ", "").replace("\t", "")

或者,使用正则表达式:

import re
re.sub(r"\s", "", "foo bar\t")

4
投票

删除Python中的起始空间

string1="    This is Test String to strip leading space"
print string1
print string1.lstrip()

删除Python中的尾随或结束空格

string2="This is Test String to strip trailing space     "
print string2
print string2.rstrip()

从Python的字符串的开头和结尾删除whiteSpaces

string3="    This is Test String to strip leading and trailing space      "
print string3
print string3.strip()

删除python中的所有空格

string4="   This is Test String to test all the spaces        "
print string4
print string4.replace(" ", "")

3
投票

尝试使用re.sub正则表达式。您可以搜索所有空格并替换为空字符串。

模式中的\s将匹配空白字符 - 而不仅仅是空格(制表符,换行符等)。你可以阅读更多关于它in the manual


3
投票
import re
re.sub(' ','','strip my spaces')

2
投票

正如Roger Pate所提到的,以下代码为我工作:

s = " \t foo \n bar "
"".join(s.split())
'foobar'

我正在使用Jupyter Notebook运行以下代码:

i=0
ProductList=[]
while i < len(new_list): 
   temp=''                            # new_list[i]=temp=' Plain   Utthapam  '
   #temp=new_list[i].strip()          #if we want o/p as: 'Plain Utthapam'
   temp="".join(new_list[i].split())  #o/p: 'PlainUtthapam' 
   temp=temp.upper()                  #o/p:'PLAINUTTHAPAM' 
   ProductList.append(temp)
   i=i+2

0
投票

TL / DR

使用Python 3.6测试了该解决方案

要从Python3中的字符串中去除所有空格,可以使用以下函数:

def remove_spaces(in_string: str):
    return in_string.translate(str.maketrans({' ': ''})

要删除任何空白字符('\ t \ n \ r \ x0b \ x0c'),您可以使用以下函数:

import string
def remove_whitespace(in_string: str):
    return in_string.translate(str.maketrans(dict.fromkeys(string.whitespace)))

说明

Python的str.translate方法是str的内置类方法,它接受一个表并返回字符串的副本,每个字符通过传递的转换表映射。 Full documentation for str.translate

要创建转换表,请使用str.maketrans。这种方法是str的另一种内置类方法。这里我们只使用一个参数,在本例中是一个字典,其中键是要替换的字符映射到具有字符替换值的值。它返回一个与str.translate一起使用的转换表。 Full documentation for str.maketrans

python中的string模块包含一些常见的字符串操作和常量。 string.whitespace是一个常量,它返回一个包含所有被认为是空格的ASCII字符的字符串。这包括字符空格,制表符,换行符,返回页面,换页符和垂直制表符.Full documentation for string

在第二个函数中,dict.fromkeys用于创建一个字典,其中键是由string.whitespace返回的字符串中的字符,每个字符的值为NoneFull documentation for dict.fromkeys

© www.soinside.com 2019 - 2024. All rights reserved.