我如何剥离所有的空间在一个python字符串?例如,我想要一个像stripmyspaces这样的字符串变成stripmyspaces,但我似乎不能用strip()来完成:

>>> 'strip my spaces'.strip()
'strip my spaces'

当前回答

TL /博士

这个解决方案使用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的内置类方法,它接受一个表,并返回通过传递的转换表映射的每个字符的字符串副本。str.translate的完整文档

要创建转换表,使用str.maketrans。这个方法是str的另一个内置类方法。在这里,我们只用一个形参来使用它,在这种情况下是一个字典,其中的键是要替换的字符映射到字符替换值的值。它返回一个用于str.translate的翻译表。str.maketrans的完整文档

python中的string模块包含一些常见的字符串操作和常量。字符串。whitespace是一个常量,返回一个包含所有被认为是空格的ASCII字符的字符串。这包括字符空格、制表符、换行符、返回符、换行符和垂直制表符。string.whitespace的完整文档

在第二个函数中,dict.fromkeys用于创建一个字典,其中键是string返回的字符串中的字符。每个值为None的空格。dict.fromkeys的完整文档

其他回答

最简单的是使用replace:

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

或者,使用正则表达式:

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

用re.sub试试正则表达式。您可以搜索所有空白,并将其替换为空字符串。

模式中的\s将匹配空白字符,而不仅仅是空格(制表符,换行符等)。你可以在手册中读到更多的信息。

下面是另一种使用普通列表理解的方法:

''.join([c for c in aString if c not in [' ','\t','\n']])

例子:

>>> aStr = 'aaa\nbbb\t\t\tccc  '
>>> print(aString)
aaa
bbb         ccc

>>> ''.join([c for c in aString if c not in [' ','\t','\n']])
'aaabbbccc'
import re
re.sub(' ','','strip my spaces')

对于Python 3:

>>> import re
>>> re.sub(r'\s+', '', 'strip my \n\t\r ASCII and \u00A0 \u2003 Unicode spaces')
'stripmyASCIIandUnicodespaces'
>>> # Or, depending on the situation:
>>> re.sub(r'(\s|\u180B|\u200B|\u200C|\u200D|\u2060|\uFEFF)+', '', \
... '\uFEFF\t\t\t strip all \u000A kinds of \u200B whitespace \n')
'stripallkindsofwhitespace'

...处理任何你没有想到的空白字符——相信我们,有很多。

\s本身总是覆盖ASCII空白:

(定期)空间 选项卡 新行(\n) 回车(\r) 换页 垂直制表符

另外:

对于启用了re.UNICODE的Python 2, Python 3,无需任何额外操作,

...\s还包括Unicode空白字符,例如:

插入空格, 他们的空间, 表意的空间,

…等。在“带有White_Space属性的Unicode字符”下面可以看到完整的列表。

但是\s不覆盖不属于空格的字符,这些字符实际上是空格,例如:

任意工匠, 蒙古语元音分隔符, 零宽度不间断空格(又称字节顺序标记),

…等。请在“没有White_Space属性的相关Unicode字符”下面查看完整列表。

所以这6个字符包含在第二个正则表达式的列表中,\u180B|\u200B|\u200C|\u200D|\u2060|\uFEFF。

来源:

https://docs.python.org/2/library/re.html https://docs.python.org/3/library/re.html https://en.wikipedia.org/wiki/Unicode_character_property