如何通过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
相关产品推荐
相关产品推荐

