sublime正则替换是数据清洗关键环节,^和$不匹配行首行尾主因是换行符识别混乱,需切unix(lf)格式或显式用\r?兼容crlf;提取字段应避免.*?跨标签,改用引号定界;乱码源于编码错误,粘连因语义丢失,空行失控多因\s不匹配全角空白。

Sublime 的正则替换不是“辅助工具”,而是数据分析前期预处理中真正能卡住清洗节奏、决定后续流程是否崩盘的关键环节。它不执行逻辑判断,但一旦规则写错或边界没控住,导出的字段就全乱——比如把手机号混进地址里、把 JSON 字段名和值一起删掉、空行删不干净导致 CSV 解析错位。
为什么^和$在清洗原始日志/HTML时总不匹配行首行尾
根本不是正则写错了,是 Sublime 默认不把 \r\n 当作换行边界来锚定 ^ 和 $,尤其 Windows 粘贴的文本、中文界面下更明显。
- 现象:想删所有以
#开头的注释行,^#没反应;想清末尾空行,\s*$总漏最后一行 - 原因:Windows 的
\r\n让$只认到\r前,\n被跳过;中文插件有时还会干扰换行符识别 - 解法优先级(从高到低):
- 右下角点击换行标识 → 切成 Unix (LF) 格式(最稳)
- 保留 CRLF 时,显式补
\r?:^#\r?、\s*\r?$ - 必须用全文结尾锚定时,加
\Z:\s*\Z比\s*$更可靠
提取结构化字段时,.*? 为什么比 ]*> 更容易跨标签吃数据
.*? 是懒惰匹配,但它不理解 HTML 结构——只要中间没遇到字面量 >,就会一路吞过去,遇到 title="Xiaomi " 这种就直接崩。
- 安全提取品牌名:用
title="([^"]+)"或data-brand=['"]([^'"]+)['"],靠引号定界,不依赖标签闭合 - 删 HTML 标签时:
]*>天然防伪标签(如alt="A ),而 <code><.></.>在 Sublime 的 Pythonre引擎里跨行失效,且会误杀 JS 字符串里的<div> <li>如果标签被折行(<code><div>),先统一换行符:<code>(?:\r\n|\r|\n)+→\n,再跑]*>清洗后文本粘连、乱码、空行失控,问题真不在正则本身
删完标签只剩“标题内容”,这不是正则太狠,是语义丢了;复制进去的网页源码显示方块字,也不是
.*写错了——这两类问题 90% 出在编码和空白处理上。- 乱码:右下角看 Encoding,若显示 Western (CP1252) 或 GBK,但原始数据是 UTF-8(尤其带 BOM),就手动转码:
File → Reopen with Encoding → UTF-8 - 粘连:块级标签要单独换行处理,
<p></p>→\n,→\n,<br>
→\n,不能只删标签 - 空行失控:
\s+不匹配全角空格(\u3000)、不间断空格(\u00A0),得用[ \t\n\r\f\v\u3000\u00A0\u2000-\u200B\u2028\u2029]+替换为单个半角空格
多光标编辑不能直接套正则,但它是批量改 SQL/JSON 的唯一可控路径
想给 JSON 里每个
"id"字段值加前缀?别指望 Ctrl+D 或 Ctrl+Shift+L 自动识别正则模式——Sublime 的多光标本身不解析正则,必须分两步走。- 先用查找面板(
Ctrl+F)输入正则:"id"\s*:\s*"(\w+)",勾选.*和Match case - 按
Alt+F3选中全部匹配项(光标落在引号内)→ 按←移到开头 → 手动输入user_ - 关键细节:捕获组
$1可用于替换框,但多光标下键盘输入更可控,尤其涉及引号、逗号补全时 - 误操作后用
Ctrl+U(软撤销)比Ctrl+Z更精准,能回退单次多光标动作
最容易被忽略的是文件末尾状态:没换行符的文本,
$就永远匹配不到最后一行结尾;而清洗后的字段如果混着全角空格和\u200B零宽空格,\s会完全失效——这些点不提前扫一遍,后面 Pandas 读 CSV 报错、SQL 导入截断,都算“意料之中”。 - 乱码:右下角看 Encoding,若显示 Western (CP1252) 或 GBK,但原始数据是 UTF-8(尤其带 BOM),就手动转码:










