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 空格,用 [ ]+ 或加 flag re.ASCII
strip() 和 lstrip()/rstrip() 的作用范围这三个方法**只动首尾,完全不影响中间空格**,常被误认为能“去空格”。如果你发现调了 strip() 但中间空格还在,不是 bug,是设计如此。
" hello world
".strip() → "hello world"(首尾空格没了,中间两个还在).strip("x") 删首尾 x,但依然不碰中间lstrip(),“只删结尾”用 rstrip(),别指望它们解决内部问题真正要处理字符串内部空格,得看清楚目标:全删?压缩?留首尾?还是按规则替换?选错方法会导致结果不符合预期,尤其是把 strip() 当万能解,或者忽略 \s 和 " " 的语义差别。