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

新手上路,请多包涵

如何去除python字符串中的所有空格?例如,我希望将 strip my spaces 之类的字符串转换为 stripmyspaces ,但我似乎无法使用 strip() 来实现:

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

原文由 wrongusername 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 652
2 个回答

在没有 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 倍,但请记住,您的瓶颈肯定在其他地方。大多数程序不会注意到这三个选项之间的区别。

原文由 Roger Pate 发布,翻译遵循 CC BY-SA 2.5 许可协议

对于 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 空白字符,例如:

  • 不间断的空间,
  • 空间,
  • 表意空间,

…ETC。请在 此处查看完整列表,位于“具有 White_Space 属性的 Unicode 字符”下

但是 \s 不包括未归类为空白的字符,这些字符实际上是空白,例如:

  • 零宽度连接器,
  • 蒙古元音分隔符,
  • 零宽度不间断空格(又名 字节顺序标记),

…ETC。请在 此处查看完整列表,位于“没有 White_Space 属性的相关 Unicode 字符”下

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

资料来源:

原文由 Tim Yates 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题