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

用 strip() 去掉字符串开头和结尾的空格
这是最常用也最容易被误用的操作。strip() 只影响首尾,对中间空格完全没反应,且默认去除的是所有空白字符(包括 \n、\t、\r),不只是空格。
- 如果只想去掉首尾 ASCII 空格(不碰制表符或换行),显式传参:
" hello\t\n ".strip(" ") → "hello\t\n" - 注意:传入字符串
" "是“只删空格”,但传入" \t\n"才等价于默认行为 - 常见错误:以为
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(" ", "")不动\t或\n;而re.sub(r"\s+", " ", s)会把所有空白符(含制表、换行)都视作可压缩对象
split() + join() 是最稳妥的“去多余空格”组合
这个组合天然无视所有空白字符类型,且自动跳过首尾和中间的连续空白,适合清洗不可信输入(比如用户粘贴进来的带各种缩进的文本)。
- 效果等价于“先按任意空白切分,再用单空格拼接”:
" a\t\n 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"[\s\u2000-\u200F\u2028-\u202F\u2060-\u206F\u3000]+", " ", s).strip()
(覆盖常见 Unicode 空白区) - 如果业务明确只处理 ASCII,反而该加断言:
if any(ord(c) > 127 for c in s): raise ValueError("Non-ASCII whitespace detected")










