replace()最直接删除所有半角空格;split()+join()可标准化空白(去首尾、压多空格为一);re.sub()支持条件化精确控制,如删特定位置或全部空白符。

用 replace() 删除所有空格最直接
如果目标是把字符串里**所有空格(包括开头、中间、结尾)全干掉**,replace() 是最直白的选择。它不区分位置,只做字符替换。
-
"hello world python".replace(" ", "")→"helloworldpython" - 注意:只匹配半角空格
" ",制表符"\t"、换行符"\n"不受影响 - 性能好,适合简单清洗;但无法保留单词间单空格、只删多余空格等更精细需求
用 split() + " ".join() 压缩中间空格
当你要的是「把多个连续空格变成一个,同时去掉首尾空格」——也就是标准的“规范化空白”,这是最常用组合。
-
" hello world python ".split()先按任意空白切分,丢弃空项,得到["hello", "world", "python"] -
" ".join(...)再用单个空格拼回去 →"hello world python" - 它会同时处理
"\t"、"\n"、"\r"和多个空格,比replace()更鲁棒 - 缺点:无法控制“保留两个空格”或“只处理中间、不动首尾”这类定制逻辑
用正则 re.sub() 精确控制空格替换
需要条件化处理时,比如「只删中间的连续空格,首尾空格保留」或「删掉非换行符的空白」,就得上 re 模块。
- 删所有空白字符(含
\t、\n、\r):import re re.sub(r"\s+", "", "hello\tworld\n python") # → "helloworldpython"
- 只删“非开头非结尾”的连续空格(保留首尾):
re.sub(r"(?(注意这个模式较难写对,实际中较少用)
-
\s默认包含 Unicode 空白,如需严格只匹配 ASCII 空格,用[ ]+或加 flagre.ASCII
警惕 strip() 和 lstrip()/rstrip() 的作用范围
这三个方法**只动首尾,完全不影响中间空格**,常被误认为能“去空格”。如果你发现调了 strip() 但中间空格还在,不是 bug,是设计如此。
立即学习“Python免费学习笔记(深入)”;
-
" hello world ".strip()→"hello world"(首尾空格没了,中间两个还在) - 它们的参数可以指定要删的字符,比如
.strip("x")删首尾 x,但依然不碰中间 - 想“只删开头空格”用
lstrip(),“只删结尾”用rstrip(),别指望它们解决内部问题
真正要处理字符串内部空格,得看清楚目标:全删?压缩?留首尾?还是按规则替换?选错方法会导致结果不符合预期,尤其是把 strip() 当万能解,或者忽略 \s 和 " " 的语义差别。










