最快清除ASCII空格用链式replace():text.replace(‘ ‘,”).replace(‘t’,”).replace(‘n’,”).replace(‘r’,”);Unicode空格需re.sub()或translate()。

用 replace() 最快清除所有 ASCII 空格
如果字符串里只有普通空格(' ')、制表符('t')、换行('n')、回车('r'),直接链式调用 replace() 效率最高,比正则还快。
text.replace(' ', '').replace('t', '').replace('n', '').replace('r', '')- 不推荐
replace(' ', '')单用——它只删空格,漏掉t和n - 注意:多次
replace()会生成新字符串,原字符串不变(python 字符串不可变)
用 re.sub() 清除所有 Unicode 空格字符
当字符串含全角空格(' ')、不间断空格('xa0')、零宽空格('u200b')等 Unicode 空格时,必须用正则匹配 s 或更严格的 p{Z}(需 Regex 模块)。
import re text = "hello worldtnxa0" cleaned = re.sub(r's+', '', text) # s 匹配 [tnrfv] + 空格,但不包含全角空格 # 若需真正“所有空格字符”,用: # cleaned = re.sub(r'[su3000xa0u2000-u200fu2028-u2029]+', '', text)
-
s在 Python 标准re中默认不匹配全角空格('u3000')和 NBSP('xa0') - 实际项目中建议显式列出常见 Unicode 空格范围,避免依赖 locale 或 Python 版本差异
str.translate() 是内存友好型批量处理方案
处理大量字符串(如读取 csv、日志行)时,translate() 比循环或正则快 3–5 倍,尤其适合预定义清除规则。
import string # 构建删除所有常见空白字符的 table remove_chars = 'tnrfv ' + 'u3000xa0u200b' translator = str.maketrans('', '', remove_chars) text = "a btcn" cleaned = text.translate(translator)
-
str.maketrans()第三个参数传入要删除的字符组成的字符串 - 该方法不支持正则,也不能动态扩展;适合已知固定字符集的清洗场景
- 注意:全角空格
'u3000'和零宽空格'u200b'必须显式加入remove_chars,否则不会被删
别忽略 strip() 和 split()+join() 的适用边界
strip() 只去首尾,split()+join() 看似简洁,但有严重副作用:它会把连续多个空格压缩成一个,且无法区分空格类型(比如把 't' 也当空格吃掉)。
立即学习“Python免费学习笔记(深入)”;
-
text.strip()→ 只影响开头结尾,中间空格原样保留 -
''.join(text.split())→ 会误杀所有空白并合并,'atb'变成'ab',但'a b'也变成'ab',行为不可控 - 除非你明确需要「规范化空白为单空格再清空」,否则不要用
split()+join()
真正难的是识别哪些“空白”该删、哪些不该删——比如数学公式里的空格、代码缩进、富文本中的不可见分隔符。没有银弹,得看数据来源和业务语义。