Sublime Text提取含关键词段落需用否定前瞻正则^(?:(?!\n\n).)关键词(?:(?!\n\n).)\n?(?=\n\n|$),并统一换行符、转义元字符、用$0\n替换保留结构。

匹配包含关键词的完整段落(以空行分隔)
Sublime Text 默认不支持跨行匹配,直接写 .*关键词.* 只能匹配单行。要提取“段落”,得先定义什么是段落——通常指由空行分隔的连续非空行块。需启用 . 匹配换行符,并用否定字符集界定段落边界。
实操建议:
- 打开
Find → Find...(Ctrl+F/Cmd+F),勾选Regular Expression和Match Case(如需区分大小写) - 输入正则:
^(?:(?!\n\n).)*关键词(?:(?!\n\n).)*\n?(?=\n\n|$) - 解释:用
(?!\n\n)否定前瞻确保不跨过双换行;^和(?=\n\n|$)锚定段落起止;\n?允许末尾带一个换行 - 点击
Find All,再按Ctrl+Shift+L(或Cmd+Shift+L)将所有匹配转为多光标,方便批量复制或编辑
处理 Windows 换行符(\r\n)导致匹配失败
在 Windows 环境下,段落间空行实际是 \r\n\r\n,而 Sublime 的正则引擎对 \r 默认不敏感,会导致上述正则失效。
实操建议:
- 先统一换行符:菜单
File → Line Endings → Unix (LF),或用正则替换\r\n→\n - 若必须保留
\r\n,把正则中的\n\n替换为(?:\r\n\r\n|\n\n),即:^(?:(?!(?:\r\n\r\n|\n\n)).)*关键词(?:(?!(?:\r\n\r\n|\n\n)).)*\n?(?=(?:\r\n\r\n|\n\n)|$) - 注意:Sublime 的
.默认不匹配\r,所以不能简单写.*,必须用(?:(?!(...)).)*这种否定式绕过
提取后保留原始段落结构(含内部缩进/换行)
直接用 Find All + 多光标复制会丢失段落内换行,因为 Sublime 把每行当独立匹配项。要保持结构,得用替换功能“捕获+还原”。
实操建议:
- 在
Replace面板中,查找字段填同上正则,替换字段填:$0\n($0表示整个匹配内容,加\n保证段落间有空行) - 新建空白标签页,
Ctrl+A全选原文件 →Ctrl+H打开替换面板 →Replace All - 结果会是纯提取内容,但段落内部换行、空格、缩进全部保留;若需去重或排序,可在新页面用
Sort Lines插件辅助 - ⚠️ 避免误操作:替换前务必
Ctrl+Z撤回或先Save As备份原文件
关键词含正则元字符(如 .、*、+)时怎么处理
如果关键词是 file.txt 或 C++,未转义的 . 和 + 会被当作正则语法,导致匹配不到字面量。
实操建议:
- 手动转义:把
.写成\.,+写成\+,*写成\*,?写成\?,[写成\[等 - 快速生成:在外部用 Python 一行搞定:
import re; print(re.escape("file.txt"))→ 输出file\.txt - 粘贴到 Sublime 正则中时,确认只替换关键词部分,不要动前后锚定逻辑(如
^(?:(?!\n\n).)*这些不能被转义)
--- 分隔,有些用 ###,这时候 \n\n 就完全失效。得先人工扫几处样本,确定分隔符再写正则,比盲目套用模板更省时间。

















