sublime中提取class="headline"块的可靠正则为:(?i)[\s\s]?,需先清理注释和cdata;提取href链接应使用href\s=\s(["'])(2+)\1以避免空格和引号污染。> ↩"'>&\s ↩

提取 class="Headline" 的整个
.*? 跨行不可靠,遇到换行、注释、CDATA 或 <script></script> 里的 就提前终止或错位。真正可用的写法是:
- 开头加
(?i)忽略大小写(<table> 也算)<li>用 <code>[^>]*替代.*?匹配开始标签内部属性,避免吞掉>导致跨标签 - 用
[\s\S]*?(不是.*?)实现可靠跨行 - 结尾加
(? 防止匹配到嵌套闭合标签里的 <code>
,但 Sublime 不支持负向先行断言,所以更稳妥的是先清理干扰块
推荐模式:(?i)<table>]*class="Headline"[^>]*>[\s\S]*?</table>。使用前必须手动或批量删掉 <script>[\s\S]*?</script> 和 <style>[\s\S]*?</style>,否则结果大概率截断。
为什么 href=(["'])(.*?)\1 提取链接总带空格或引号
因为 .*? 会贪婪吞掉紧邻的空白、换行甚至尖括号,而捕获组 (["']) 只锁定了引号类型,没约束内容边界。实际你想要的是干净 URL,不是带前后空格的字符串。
正确写法:href\s*=\s*(["'])([^"'>\s]+)\1。其中 [^"'>\s]+ 明确排除引号、> 和空白符,比 .*? 更稳。
常见错误现象:
- 替换后出现
https://example.com"(末尾多一个引号) - 抽到
href=" /path/ "(首尾空格没清理) - 从
<!-- href="xxx" -->这类注释里也抽出了内容
实操建议:先用 <!--[\s\S]*?--> 全选跳过注释;替换完再跑一次 ^\s+|\s+$ 清首尾空格。
一款AI工具,主要用于在主代理响应前,并行运行Kimi K2.5和GPT 5.3 Codex,注入双方观点以增强认知多样性,适合需要提升相关任务效率的用户。
Find in Files 比 Ctrl+F 更适合批量提取特定标签
单文件用 Ctrl+F + Find All 可以高亮所有匹配项,但导出纯文本时会混入路径和行号;真正要批量处理多个 HTML 文件(比如爬虫抓下来的几十个页面),必须用 Ctrl+Shift+F(Find in Files)。
关键设置:
- Where 栏必须明确指定范围,比如
./pages/*.html,留空只会搜当前文件 - 务必勾选
Regular Expression,否则<table>]*class="Headline" 当作字面量,根本匹配不到<li>关键词含 <code>.、[等元字符时,不勾正则就按字面匹配;勾了就必须转义,例如搜file.html得写file\.html
输出结果页右键 → Copy All,粘贴后用 ^[^:]+:\d+:\s* 批量删掉 “文件名:行号: ” 前缀,才能得到干净内容。
什么时候该放弃 Sublime 正则,改用 BeautifulSoup
当 HTML 结构不可控时,正则就是硬伤——比如标签未闭合、属性值含 />、srcset 含逗号列表、文件超 500KB、或者需要提取 <div class="article">...</div> 里嵌套的 <p></p> 和 <img> 并保持层级关系。
这些场景下,BeautifulSoup 不仅能容错解析,还能用 soup.find("table", class_="Headline") 精准定位,返回完整 DOM 对象。Sublime 正则做不到语义提取,它只做文本切片。
容易被忽略的一点:正则提取后文本粘连(比如 <p>标题</p>
<ul><li>项1</li></ul> 变成“标题项1”),这不是 bug,是它本就不负责语义还原。想保段落?得先单独把 <p>(.*?)</p> 替换成 \n$1\n,再删其他标签——步骤一多,出错概率就指数上升。










