sublime text正则替换是不写脚本、不装插件、不开终端下最快拉齐杂乱数据格式的唯一工具;需先统一换行、清理全角空格与首尾空白,再用非贪婪正则精准匹配分隔符。

Sublime Text 的正则替换不是“能用”,而是唯一能在不写脚本、不装插件、不开终端的前提下,把杂乱原始数据(比如 CSV 导出、日志粘贴、数据库 dump)一两秒内拉齐格式的工具——前提是知道哪几个正则模式真正扛得住真实数据里的坑。
匹配行首行尾空格和混合换行符
原始数据从 Excel、MySQL 或网页复制过来,常带不可见空格、全角空格、\r\n 和 \n 混用,导致后续正则失效或错行。不清理就直接套 ^/$ 会漏匹配。
- 先统一换行:菜单 → Line Endings → Unix(强制转
\n) - 删行首尾空白:查找
^[ \t\u3000]+|[ \t\u3000]+$,替换为空(\u3000是中文全角空格) - 删纯空行(含可能的
\t):查找^[ \t\u3000]*$\n?,替换为空;再补一次\n$→ 空,去掉末尾多余换行
处理逗号/分号分隔但无引号包裹的脏数据
比如从旧系统导出的 CSV,字段含逗号却没加双引号,直接按 , 切会断错。这时得靠「非贪婪+边界」定位真实字段分隔点。
- 把每行按逗号切为单列(假设无嵌套逗号):查找
,(?! ),替换为\n(加个空格判断可避开 “1,000” 类数字) - 更稳的做法:查找
((?,只匹配「字母间、数字间的逗号」,避免误切小数点或千分位 - 如果字段本身含换行(如 MySQL TEXT 字段),必须先开启 . matches newline,再用
(?s)('([^']*)')|("([^"]*)")提取引号内容,防止跨行断裂
快速补全缺失字段并标准化值格式
常见于日志或表单导出:某列有时为空、有时是 N/A、有时是 null、有时是空字符串,需要统一成 - 或 null。
- 匹配所有“空值变体”:查找
^(N\/A|null|NULL|\s*| |—)$,替换为-(注意是 HTML 空格实体) - 标准化日期:查找
(\d{4})[-/\.](\d{1,2})[-/\.](\d{1,2}),替换为$1-$2-$3(统一为YYYY-MM-DD) - 清理手机号中间空格/短横:查找
(\d{3})[\s\-]?(\d{4})[\s\-]?(\d{4}),替换为$1 $2 $3(或按需拼接)
为什么 Replace All 有时只生效一半?
不是正则写错了,而是 Sublime 的替换引擎在一次扫描中不会重复匹配刚生成的内容。比如你用 +(空格+)替换为单个空格,连续多个空格只会被处理一次。
- 解决办法:多点几次
Replace All,直到状态栏显示 “Replaced 0 occurrences” - 更彻底:用
+(空格+)→(单空格),再用$(行尾空格)→ 空,分两步清 - 大文件(>10MB)卡住?关掉 Highlight matches(菜单 → Find → Highlight matches),它会拖慢正则预览
最常被跳过的一步是:没先用 Ctrl+F 单独验证查找逻辑是否真能命中目标——尤其当数据里混着零宽空格、BOM、或不可见控制字符时,Replace All 表面成功,实际什么都没改。











