You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python的pandoc库提取Markdown文件中的h1标题内容

基于pandoc-python提取Markdown h1标题的实现方案

你通过pandoc.read()获取到的是pandoc原生的Pandoc对象,结构为Pandoc(元数据对象, 块元素列表),其中块元素列表里就包含了h1对应的Header类型节点,你可以参考下面两种方案实现提取:

方案1:手动遍历节点拼接纯文本

from pandoc.types import Header, Str, Space, SoftBreak

content = pandoc.read(post.content)
h1_title = ""

# 遍历所有块元素
for block in content[1]:
    # 匹配一级标题节点
    if isinstance(block, Header) and block[0] == 1:
        # 遍历标题内的行内元素拼接文本
        for inline_item in block[2]:
            if isinstance(inline_item, Str):
                h1_title += inline_item[0]
            elif isinstance(inline_item, (Space, SoftBreak)):
                h1_title += " "
        # 默认取第一个h1作为title,不需要后续遍历直接退出
        break

h1_title = h1_title.strip()

说明:该方案需要你根据自己文档里h1包含的行内元素类型补充匹配逻辑,比如如果有粗体、斜体元素,额外添加对应类型的判断即可。

方案2:调用pandoc转换简化实现

如果不想手动处理各类行内元素,可以直接把匹配到的h1节点单独转换为markdown文本,再格式化得到纯文本标题:

content = pandoc.read(post.content)
h1_title = ""

for block in content[1]:
    if isinstance(block, Header) and block[0] == 1:
        # 将h1节点单独转换为markdown格式字符串
        h1_md = pandoc.write(block, format="markdown")
        # 去除markdown一级标题的前缀# 和首尾空白
        h1_title = h1_md.lstrip("# ").strip()
        break

说明:该方案复用pandoc的转换能力,无需手动处理各类富文本行内元素,适配性更强。

如果你的文档存在多个一级标题,删除代码里的break即可收集所有h1内容。


内容的提问来源于stack exchange,提问作者Jiri B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:54:01