import mistune class PlainTextRenderer(mistune.HTMLRenderer): def text(self, text): return text def link(self, text, url, title=None): return text def image(self, alt, url, title=None): return alt def emphasis(self, text): return text def strong(self, text): return text def block_code(self, code, info=None): # remove code return "" def block_quote(self, text): return text def heading(self, text, level): return text + "\n" def newline(self): return "\n" def list(self, text: str, ordered: bool, **attrs) -> str: if ordered: html = "" return html + "\n" + text + "\n" return "\n" + text + "\n" # FIXME: 现在的 list 转换没法保留序号 def list_item(self, text): return "" + text + "\n" def paragraph(self, text): return text + "\n" def codespan(self, text: str) -> str: # remove code return "" def thematic_break(self) -> str: # remove break return "\n" def markdown_to_text(markdown_text): renderer = PlainTextRenderer() markdown = mistune.create_markdown(renderer=renderer) text = markdown(markdown_text) text = text.strip() return text if __name__ == "__main__": markdown_text = """ # 标题 这是一个示例文本,其中包含 **加粗**、*斜体*、[链接](http://example.com) 和其他 Markdown 语法。 ```ts console.log(1) ``` - 列表项 1 - 列表项 2 - 列表项 3 1. 第一 2. 第二 > 这是一个引用。 `代码片段` """ plain_text = markdown_to_text(markdown_text) print(plain_text)