当前位置: 首页 > news >正文

markdown文档格式分析,再使用python对md文件进行结构化拆解

一、markdown文档

Markdown 文档本质上是:一个树状结构(Block 级) + 行内结构(Inline 级)

Block 级元素(结构):

  • heading_open → inline → heading_close

  • paragraph_open → inline → paragraph_close

  • list_open → list_item_open → inline → list_item_close

  • blockquote_open → ...

  • fence(代码块)

Inline 级元素(在一行内出现):

  • text

  • image

  • link_open → inline → link_close

  • strong_open / strong_close

  • em_open / em_close

md文件结构规律

一个 block 总是成对出现

MarkdownToken
# 标题 heading_open → inline → heading_close
段落 paragraph_open → inline → paragraph_close
列表项 list_item_open → inline → list_item_close

 

content 只用于“行内”文本,不用于结构 token

typecontent
heading_open ""
inline 整行文本(包含 md 语法)
text 文本内容
image alt 文本(即 ![alt] )

 

二、python包:markdown-it

1. markdown-it 将 Markdown 文档解析成一个扁平化的 Token 列表,每个 Token 都有下列属性:

type—— “语法元素类型”(关键),决定 Token 代表哪种 Markdown 结构,常见type包括:

语法 type
# 标题 heading_open, heading_close
段落 paragraph_open, paragraph_close
行内内容 inline
图片 ![]() image
列表 - item bullet_list_open, list_item_open

 

tag —— 对应 HTML 标签名称(比如 h1, p, img)

类型 tag
heading_open(###) h3
paragraph_open p
image img

content —— 文本内容(只有 inline 或 text 子 Token 才有)

  • 对于 inline → content 是整行的原始文本(如 "docker images"

  • 对于 text → content 是纯文字(真正的文本节点)

  • 对于 image → content 是 alt 内容(比如 "image-2025..."

attrs —— HTML 属性(图片的 src/alt/title 全在这里)

2. Markdown → Token 映射

假设有markdown原文:

### 语法

docker images![image-2025xxxx](docker学习-use-images/image-2025xxxx.png)

使用代码将文档进行拆解:

from pathlib import Path
from markdown_it import MarkdownItmd = MarkdownIt()md_path = Path(r"./docker学习.md")
md_text = md_path.read_text(encoding="utf-8")tokens = md.parse(md_text)for t in tokens:print(f"type: {t.type}, tag: {t.tag}, content: {t.content}, attrs: {t.attrs}")

得到语义树:

heading_open  (tag h3)inline -> text("语法")
heading_close (tag h3)paragraph_openinline -> text("docker images")
paragraph_closeparagraph_openinline -> image (alt="image-2025...", src="docker学习-use-images/...")
paragraph_close

这套结构适合用代码进行文档分析。

3. markdown-it的一些用法

简要示例

from markdown_it import MarkdownIt# 安装 & 创建解析器
md = MarkdownIt()# 将文本渲染成html格式字符串
text = """
### 标题这是一个段落,包含 **粗体** 和 *斜体*。![图1](images/img1.png "图1标题")
"""html = md.render(text)
print(html)# 将文本解析成token列表,需要先将md文档逐行读取到变量里面
md_path = Path(r"./docker学习.md")
md_text = md_path.read_text(encoding="utf-8")tokens = md.parse(md_text)for t in tokens:print(f"type: {t.type}, tag: {t.tag}, content: {t.content}, attrs: {t.attrs}")

 

http://www.jsqmd.com/news/64279/

相关文章:

  • CMake Uninstall
  • 实用指南:通过约束编程优化医疗智能系统的伦理风险降低(下)
  • 【Java 开发日记】大家来说一下 Mybatis 的缓存机制
  • Day12-20251206
  • 悬架设计计算工具:开启悬架设计学习与实践的钥匙
  • Solon AI 开发学习17 - generate - 使用复杂提示语
  • c++笔记
  • 别再发愁!对比多款后锁定这6个型号,挑选高中学习机,不花冤枉钱
  • [UVA1316 Supermarket]
  • 使用typora来写md文件时配置文件存放图片的路径
  • 靠谱厂房拆迁法律机构排行榜 2026:专业解析与高性价比解决方案
  • 滥用ESC10:通过注册表配置不当实现权限提升的ADCS攻击分析
  • [NOI2015 程序自动分析]
  • 【基础】Unity着色器网格和计算对象介绍
  • 【基础】Unity着色器网格和计算对象介绍
  • 基于大内容的保险数据管理与可视化分析平台
  • 深入解析:C++ 闭散式和开散式的模拟实现
  • 基于先验地图的无人机路径规划
  • 首单半价对话框的实现
  • Anchor宽高比
  • SAM3模型来了,手把手带你运行SAM3模型代码,SAM3模型初探!
  • 从可优化到可进化:企业智能化的本质、边界与治理
  • SGD优化器贯穿Faster R-CNN的全模型
  • 线段树学习笔记
  • Anchor尺寸
  • 西门子S7-1200与施耐德Altivar320通讯 工业自动化场景的总线协议转换方案
  • 短剧小程序 2025 核心痛点分析:内容、工艺与合规的三重困境
  • 「C++」vector的利用及接口模拟详解
  • 「Java EE开发指南」如何在MyEclipse中构建EJB 2 Session Bean?(一)
  • Android开发 Jetpack_Compose DatePickerBottomSheet 滚轮日历选择器对话框