正则替换不能自动洗数据,需先明确定义清洗目标和边界;Sublime中^$默认不匹配行首尾因多行模式限制,需切纯文本、兼容\r?、统一换行符;\s不匹配全角空格等Unicode空白,须显式添加\u3000等;结构化文本应避免.贪婪匹配,改用1惰性匹配并启用.匹配换行;Alt+F3基于正则匹配定位整块,Ctrl+Shift+L按行拆光标,适用场景不同。" ↩

正则替换本身不能“洗数据”,它只是按规则批量改文本;真正高效的前提是:你得先想清楚要清洗什么、边界在哪、哪些该留哪些该删——否则越替越乱。
为什么 ^ 和 $ 在 Sublime 里经常不匹配行首行尾
不是你的正则写错了,而是 Sublime 默认的多行模式(Multiline)下,^ 和 $ 只匹配整个文档开头和结尾,不是每行的起止。尤其 Windows 粘贴进来的文本带 \r\n,中文界面插件还可能干扰换行符识别,^# 就根本找不到行首的 #。
- 先按
Ctrl+Shift+P输入Set Syntax: Plain Text,切回纯文本模式,排除语法高亮插件干扰 - 在查找框里显式兼容
\r?,比如把^#改成^#\r? - 右下角点击换行符标识(如显示
Windows (CRLF)),手动切到Unix (LF)再试 - 如果必须保留 CRLF,正则里所有涉及行边界的,都补上
\r?,别省
删除空行或清理混合空白时,\s 为什么总漏掉全角空格
\s 只认 ASCII 空白: 、\t、\n、\r、\f、\v,对中文全角空格(U+3000)、不间断空格(U+00A0)、零宽空格(U+200B)完全无效——这是汉化界面下最常被忽略的断裂点。
- 查全角空格最稳方式:直接复制一个全角空格粘贴进查找框,或输入
\u3000 - 批量清理混合空白用:
[ \t\n\r\f\v\u3000\u00A0\u2000-\u200B\u2028\u2029]+,替换为单个半角空格 - 若要保留段落间空行,改成:
[ \t\r\f\v\u3000\u00A0\u2000-\u200B\u2028\u2029]+(?=\S),只匹配后面紧跟非空白字符的空白块 - 注意:替换后若出现中文变方块,不是正则问题,是文件编码错位(比如 UTF-8 BOM 文件被 GBK 解码),检查
file_encoding设置
想批量处理 JSON 或日志里的字段,别硬套 .*
用 .* 匹配字段值极易跨行或吞太多内容,比如清洗 "id": "123" 时,"id"\s*:\s*".*" 可能一路吃到下个 ",甚至跨到下一行。贪婪匹配在结构化文本里就是定时炸弹。
- 一律改用惰性匹配:
"id"\s*:\s*"([^"]*)"——[^"]*明确限定在双引号内 - 跨行场景(如多行 JSON 或 HTML 片段)必须启用
.\n模式(点击\n图标),否则.不匹配换行符 - 多行注释块(如
/* ... */)不能靠/\*\*.*\*/,得用/\*\*[\s\S]*?\*/,[\s\S]才真能吃掉换行 - 替换时优先用捕获组 +
$1引用,比如把"name": "Alice"改成"name": "USER_Alice",查找填"name"\s*:\s*"([^"]*)",替换填"name": "USER_$1"
Alt+F3 和 Ctrl+Shift+L 的本质区别与误用陷阱
很多人以为这两个都是“生成多光标”,但触发逻辑和适用场景完全不同:前者基于正则匹配结果,后者基于物理行结构。混用就容易选错范围、漏改或误删。
-
Alt+F3:必须先用正则在查找面板里Find All,再按它——光标落在每个匹配项的**整个匹配区域**上,适合替换、包裹、删除整块内容 -
Ctrl+Shift+L:对已选中文本(比如你手动框选了 5 行),把它按行拆成独立光标,光标默认落在**每行末尾**,适合统一加后缀、调缩进、补逗号 -
Ctrl+D是逐个扩展选择,不适合“全量清洗”场景,手一抖就漏掉几个,不可靠 - 零宽断言(如
^、\b)也能被Alt+F3定位,光标停在断言位置,可用于批量插前缀/后缀,但要注意中文混排时\b失效,优先用(? / <code>(?!\w)
最麻烦的永远不是怎么写正则,而是清洗目标本身是否定义清晰——比如“清理手机号”,是指删掉所有 11 位数字,还是只删掉孤立的、前后无字母数字的?边界没想清,正则再准也洗偏。动手前花 30 秒画个例子,标出哪些该动、哪些该留,比调十分钟正则更省时间。

















