str.strip()仅去除首尾空白,不处理中间空格;replace(" ", "")只删ASCII空格;translate()高效但需预设映射;re.sub(r"\s+", "")可清除所有Unicode空白字符,是最彻底的通用方案。
很多人一上来就用 str.strip(),结果发现中间的空格还在。它只处理字符串开头和结尾的空白字符(包括 ' '、'\t'、'\n' 等),对中间的空格完全没影响。
适用场景:清理用户输入前后可能误粘的空格,比如表单提交前校验。
" hello world ".strip() → "hello world"
" hello world ".strip() → "hello world"(中间三个空格保留)如果只要干掉所有 ASCII 空格(即 ' ' 字符),不用管制表符或换行符,replace() 最直白;想同时清除多种空白字符且追求性能,translate() 更快。
注意:replace(" ", "") 对 '\t' 或 '\n' 无效;而 translate() 需要提前构造映射表,稍显繁琐但一次编译可复用。
"hello\tworld\n ".replace(" ", "") → "hello\tworld\n"(只去掉了末尾那个空格)"hello world".replace(" ", "") → "helloworld"
"hello world".translate(str.maketrans("", "", " ")) → "helloworld"
正则 re.sub(r"\s+", "", s) 能匹配任意 Unicode 空白字符(空格、制表、换行、回车、分页符、甚至中文全角空格等),并全部替换成空字符串。这是真正“清空所有空白”的方案。
但要注意两点:一是正则有运行开销,短字符串不明显,高频调用需权衡;二是 \s 在 Python 中默认匹配 Unicode 空白,若明确只想处理 ASCII 空格,应改用 r"[ \t\n\r\f\v]+"。
import rere.sub(r"\s+", "", "hell
o\tworld\n ") → "helloworld"
re.sub(r"\s+", "", "你好 world ") → "你好world"(中文全角空格 也被清除)" ".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),那就要手动扩展正则模式了。