sublime正则替换需先处理换行符、html标签、编码空白三类干扰源:windows下切换unix(lf)格式或用^#\r?、\s*\z;删标签用]*>更安全;提取属性需引号配对和字符集限制;全角空格等须显式匹配;末尾无换行时用\z兜底。

Sublime 的正则替换能高效清洗爬虫原始数据,但必须先处理三类干扰源:换行符混乱、HTML 标签嵌套污染、编码与空白字符错位——否则看似正确的正则会漏匹配、跨标签、或输出乱码。
为什么^和$在Windows粘贴文本里总不锚定行首行尾
根本不是正则写错了,而是 Sublime 默认不把 \r\n 当作单个换行单元。你在 Windows 下复制的 HTML 或日志,^# 无法匹配以 # 开头的行,因为 ^ 停在 \r 前,\n 被当成普通字符。
- 最稳做法:右下角点击换行标识,切换为
Unix (LF)格式,再启用.*模式 - 临时兼容:把
^#改成^#\r?,\s*$改成\s*\Z(\Z匹配文件末尾,不受\r干扰) - 别依赖中文界面插件自动识别——先按
Ctrl+Shift+P输入Set Syntax: Plain Text切回纯文本模式
删 HTML 标签时为什么]*>比<.></.>更安全
<.></.> 在 Sublime 的 Python re 引擎里默认不跨行,且遇到 <script>console.log('<div>')</script> 会把字符串里的 <div> 也当标签删掉;而 <code>]*> 用否定字符集锁死“尖括号内不能出现 >”,天然避开属性值干扰。
- 若标签被折行(如
<div>),先统一换行符:<code>(?:\r\n|\r|\n)+→\n,再跑]*> - 要删完整标签块(含内容),用
]*>[\s\S]*?,但必须提前清除<script>]*>[\s\S]*?</script>和<style>]*>[\s\S]*?</style> -
]*>不处理注释,<!--.*?-->得单独跑一遍,否则[\s\S]*?会在-->处中断 - 正确写法:
href\s*=\s*(["'])([^"'>\s]+)\1——\1确保引号配对,[^"'>\s]+明确排除引号、尖括号、空白 - 匹配
title="Xiaomi"用title\s*=\s*(["'])([^"']*)\1,注意不是.*?,避免吃掉末尾引号前的空格 - 替换时别直接
$2输出,先用^\s+|\s+$清首尾空格,再导出 - 补段落逻辑:
<p></p>→\n,→\n,<br>
→\n,别指望一个正则解决所有块级语义 - 全角空格(
\u3000)、不间断空格(\u00A0)不会被\s匹配,得显式写进正则:[ \t\n\r\f\v\u3000\u00A0\u2000-\u200B]+ - 右下角看 Encoding,若显示
Western (CP1252)或GBK,但原始数据是 UTF-8(尤其带 BOM),手动转码:File → Reopen with Encoding → UTF-8
提取 href、title 等属性值时为什么总多出空格或引号
常见写法 href=["'](.*)["'] 中的 .* 会吞掉紧邻的空白、换行甚至下一个属性的引号,导致捕获内容脏。
清洗后文本粘连、空行失控、中文变方块,问题不在正则本身
删完标签只剩裸文本,“<p>标题</p>
真正容易被忽略的是文件末尾状态:没换行符的文件,最后一行永远无法被 ^$ 匹配到,必须靠 \s*\Z 兜底;还有剪贴板历史干扰——连续多次 Alt+Enter 后,Ctrl+V 可能粘贴出上一轮旧结果,每次提取前先 Ctrl+C 空白处清空剪贴板。











