安全提取 class="Headline" 的整个 块需两步:先用 (?i)]*class="Headline"[^>]*>[\s\S]*? 锁定范围,再预清理注释和 CDATA;若 HTML 结构不可控(如标签未闭合、属性含 、文件超 500KB),应弃用 Sublime 正则,改用 BeautifulSoup 等解析器。

直接说结论:用 Find in Files 配合 ]*> 或带捕获组的精确模式,比插件快、可控、不依赖解析器——但必须先处理 script/style 和换行,否则提取结果会错乱或截断。
怎么安全提取 class="Headline" 的整个 <table> 块?
<p>不能只靠 <code><table.>[sS]*?</table.>
—— 它在 Sublime 里跨行不可靠,且遇到嵌套 <tr><td><div> 就失效。真正能用的写法是两步走:
<ul>
<li>先锁定范围:用 <code><table>]*class="Headline"[^>]*>[sS]*?</table>(注意 [sS] 替代 .*? 才能跨行)
(?i) 忽略大小写,结尾加 (? 避免匹配到嵌套闭合标签里的
<!--[sS]*?--> 和 清掉,否则正则会卡在中间为什么 href=(["'])(.*?) 提取链接后总多出空格或引号?
因为 .*? 会吞掉紧邻的空白或换行,而 只捕获引号类型,没控制内容边界。实际要的是干净 URL,不是带前后空格的字符串:
- 正确写法:
hrefs*=s*(["'])([^"'>s]+)——[^"'>s]+明确排除引号、尖括号和空白,比.*?更稳 - 如果链接含查询参数(如
?id=1&name=test),&是实体,得手动解码,Sublime 不自动处理 - 替换时别用
$2直接输出,先粘贴到新文件,再用^s+|s+$清首尾空格
提取后文本粘连、段落丢失?这是语义塌陷,不是正则写错了
删完 <p></p> 和 <br> 标签,只剩裸文本,原来靠标签分隔的段落自然挤成一团。解决思路不是改正则,而是补逻辑换行:
立即学习“前端免费学习笔记(深入)”;
- 对块级标签单独处理:把
<p></p>替成,<div> 替成 <code>,<br>替成 - 统一换行符:先查
(?: | | )+→ 替成,避免 CRLF/LF 混用导致后续处理异常 - 最后清理空行:查
s*→ 替成,再人工删多余空行更可控 - 标签不闭合:
<div> <p>text 没闭合,<code>[sS]*?会一路吃到文件末尾 - 属性值含
或 <code>>:<img alt="A < B">,]*>会在第一个>就停,漏掉后面 - 文件超 500KB:Sublime 卡顿、搜索中断、甚至丢数据——它不是解析器,只是文本编辑器
什么时候必须放弃 Sublime 正则?
当 HTML 来源不可控时——比如爬虫抓的微信公众号正文、邮件 HTML 或用户粘贴的富文本。这些内容常见三类问题,Sublime 正则根本扛不住:
真要鲁棒处理,切到 Python 用 BeautifulSoup 或浏览器环境跑 textContent;Sublime 正则只适合你确认结构干净、量小、且只要“差不多能看”的预处理场景。



















