博客 / 詳情

返回

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 總是成對出現

Markdown Token
# 標題 heading_open → inline → heading_close
段落 paragraph_open → inline → paragraph_close
列表項 list_item_open → inline → list_item_close

 

content 只用於“行內”文本,不用於結構 token

type content
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 MarkdownIt

md = 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_open
   inline -> text("docker images")
paragraph_close

paragraph_open
   inline -> 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}")

 

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.