str.strip()仅去除首尾空白,不处理中间空格;replace(" ", "")只删ASCII空格;translate()高效但需预设映射;re.sub(r"\s+", "")可清除所有Unicode空白字符,是最彻底的通用方案。

str.strip() 只能去掉首尾空格,不是全量去空格
很多人一上来就用 str.strip(),结果发现中间的空格还在。它只处理字符串开头和结尾的空白字符(包括 ' '、'\t'、'\n' 等),对中间的空格完全没影响。
适用场景:清理用户输入前后可能误粘的空格,比如表单提交前校验。
-
" hello world ".strip()→"hello world" -
" hello world ".strip()→"hello world"(中间三个空格保留)
replace(" ", "") 和 translate() 适合纯空格替换
如果只要干掉所有 ASCII 空格(即 ' ' 字符),不用管制表符或换行符,replace() 最直白;想同时清除多种空白字符且追求性能,translate() 更快。
注意:replace(" ", "") 对 '\t' 或 '\n' 无效;而 translate() 需要提前构造映射表,稍显繁琐但一次编译可复用。
立即学习“Python免费学习笔记(深入)”;
-
"hello\tworld\n ".replace(" ", "")→"hello\tworld\n"(只去掉了末尾那个空格) -
"hello world".replace(" ", "")→"helloworld" -
"hello world".translate(str.maketrans("", "", " "))→"helloworld"
re.sub(r"\s+", "") 处理所有空白字符最彻底
正则 re.sub(r"\s+", "", s) 能匹配任意 Unicode 空白字符(空格、制表、换行、回车、分页符、甚至中文全角空格等),并全部替换成空字符串。这是真正“清空所有空白”的方案。
但要注意两点:一是正则有运行开销,短字符串不明显,高频调用需权衡;二是 \s 在 Python 中默认匹配 Unicode 空白,若明确只想处理 ASCII 空格,应改用 r"[ \t\n\r\f\v]+"。
import re-
re.sub(r"\s+", "", "hello\tworld\n ")→"helloworld" -
re.sub(r"\s+", "", "你好 world ")→"你好world"(中文全角空格也被清除)
split() + join() 会合并连续空白并丢弃首尾
" ".join(s.split()) 是个常用技巧,但它本质是「先按任意空白切分,再用单个空格拼接」,所以效果是把所有空白区域压缩成一个空格,而不是完全去除。
如果目标是彻底无空格,这个方法会出错;但如果只是想标准化空白(比如日志清洗、文本预处理),它比正则更轻量、无需 import。
-
" hello\t\tworld\n\n ".split()→["hello", "world"] -
" ".join(["hello", "world"])→"hello world" - 想得到
"helloworld"?不能直接用这个组合
import res = " hello\tworld \n" # 含空格、制表、全角空格、换行
错误:只去首尾
print(repr(s.strip())) # 'hello\tworld \n'
错误:只去ASCII空格
print(repr(s.replace(" ", ""))) # '\thello\tworld \n'
正确:清所有Unicode空白
print(repr(re.sub(r"\s+", "", s))) # 'helloworld'
真正需要“彻底去空格”时,别想当然用 strip() 或 replace(" ", "");re.sub(r"\s+", "") 才是覆盖最全的通用解,但得留意它是否真符合你的空白定义——比如要不要保留换行符,或者是否要兼容某些特殊空格(如零宽空格 \u200b),那就要手动扩展正则模式了。










