Python去掉字符串的空格_字符串开头、结尾、中间空格处理

10次阅读

strip()仅去除字符串首尾空白字符(含ntr等),不处理中间空格;需清理中间空格时用replace()或re.sub();split()+join()最稳妥;Unicode空白需特殊处理。

Python去掉字符串的空格_字符串开头、结尾、中间空格处理

strip() 去掉字符串开头和结尾的空格

这是最常用也最容易被误用的操作。strip() 只影响首尾,对中间空格完全没反应,且默认去除的是所有空白字符(包括 ntr),不只是空格。

  • 如果只想去掉首尾 ASCII 空格(不碰制表符或换行),显式传参:" hellotn ".strip(" ") → "hellotn"
  • 注意:传入字符串 " " 是“只删空格”,但传入 " tn" 才等价于默认行为
  • 常见错误:以为 strip() 能清理中间多余空格,结果发现 "a b".strip() 还是 "a b"

replace() 或正则批量替换中间空格

当需要把多个连续空格压成一个,或彻底删掉所有空格(包括中间),replace() 最快;但若要「规范化空格」(比如多空格→单空格),就得靠 re.sub()

  • 全删空格:"a b c".replace(" ", "") → "abc"
  • 多空格变单空格:
    import re re.sub(r" +", " ", "a   b    c")  # → "a b c"
  • 注意:replace(" ", "") 不动 tn;而 re.sub(r"s+", " ", s) 会把所有空白符(含制表、换行)都视作可压缩对象

split() + join() 是最稳妥的“去多余空格”组合

这个组合天然无视所有空白字符类型,且自动跳过首尾和中间的连续空白,适合清洗不可信输入(比如用户粘贴进来的带各种缩进的文本)。

  • 效果等价于“先按任意空白切分,再用单空格拼接”:" atn b c ".split()["a", "b", "c"],再 " ".join(...)"a b c"
  • 如果想保留换行逻辑(比如段落间要留空行),就不能直接 split(),得用 splitlines() 分行后各自处理
  • 性能上比正则略快,且无须导入 re,适合简单清洗场景

别忽略 Unicode 空格和不可见字符

中文全角空格( )、不间断空格(u00A0)、零宽空格(u200B)这些不会被 strip()replace(" ", ...) 处理到,容易导致看似“已清理”实则校验失败。

立即学习Python免费学习笔记(深入)”;

  • 检查是否有隐藏字符:repr(s) 比直接 print 更可靠
  • 通用清理建议:
    import re cleaned = re.sub(r"[su2000-u200Fu2028-u202Fu2060-u206Fu3000]+", " ", s).strip()

    (覆盖常见 Unicode 空白区)

  • 如果业务明确只处理 ASCII,反而该加断言:if any(ord(c) > 127 for c in s): raise ValueError("Non-ASCII whitespace detected")

text=ZqhQzanResources