最稳妥的正则为^#{1,6}\s+(.+)$,匹配1-6级标题且要求#后必有空格,避免误抓无空格伪标题;替换用$1提取纯文本,需勾选regular expression,结构化保留层级可用^(#{1,6})\s+(.+)$替换为$1 $2。

怎么用正则匹配 Markdown 标题(#、##、###)
Sublime 不识别 Markdown 语法,所谓“提取标题”,本质是用正则捕获以 # 开头、后跟空格和文字的行。最稳妥的写法是:^#{1,6}\s+(.+)$。它能匹配从一级到六级标题,且强制要求 # 后必须有空格——避免误抓 ##this_is_a_comment 这类无空格的伪标题。
常见错误现象:
- 只写
^#+\s.*$:会匹配到#####后面没内容的空标题行 - 漏掉
$:导致匹配跨行,比如一行末尾有#,下一行内容也被吞进去 - 未勾选
.*(Regular Expression):+和^当字面量处理,完全不生效
为什么不能直接用 Find All 复制出纯标题文本
默认 Find All 会高亮整行匹配内容,但复制时粘贴的是原始行(含 # 符号和空格)。你真正想要的只是 (.+) 捕获组里的标题文字——Sublime 的 Find in Files 不支持“只导出 group”,所以得靠替换中转。
实操建议:
- 先在单文件测试:查找
^#{1,6}\s+(.+)$,替换为$1(确保勾选 Regular Expression) - 确认效果无误后,再切到
Replace in Files(Ctrl+Shift+H),填同样正则和$1,指定路径如./docs/**/*.md - 替换前务必点
Find预览,防止误改代码块里以#开头的注释行
提取后怎么保留层级结构并去重
单纯替换掉 # 会丢失标题级别信息,后续无法区分哪是章节哪是子节。如果需要结构化输出(比如生成目录),得把级数也捕获进来。
将PDF文件(含扫描件、图片)转换为Markdown格式。接入MinerU和PaddleOCR双引擎,支持扫描件OCR识别、公式表格解析、多语言识别。兼容本地OCR识别。
推荐正则:^(#{1,6})\s+(.+)$,替换为:$1 $2(例如 ### API → ### API)或更清晰的 [$2](#$2)(需额外 URL 友好化处理)。
去重注意点:
- Sublime 原生不支持去重,需安装
Package Control的Remove Duplicate Lines - 先全选结果 → Ctrl+Shift+P → 输入
Sort Lines→ 回车 → 再执行Remove Duplicate Lines - 别跳过排序:重复行必须相邻,
Remove Duplicate Lines才有效
容易被忽略的 Markdown 边界问题
标题行前后可能夹着 HTML 注释、代码块或缩进列表,正则一松就串行。比如:
```js // # not a heading ``` # This is real
上面的 # not a heading 不该被提取。解决方法:
- 手动折叠非 Markdown 区域:Ctrl+Shift+P →
Fold Tags或Fold Comments - 加负向先行断言(仅限 Sublime 4+):
^(?!```|^>|^ {4}).{1,6}#\s+(.+)$,排除代码块、引用块、缩进行 - 更稳的做法:先用
Find in Files提取所有疑似标题行,粘贴到新文件,再人工删干扰项——对关键文档,半自动比全自动可靠










