gpt4 book ai didi

python - 解析和遍历 Markdown 文件中的元素

转载 作者:太空狗 更新时间:2023-10-29 17:31:08 25 4
gpt4 key购买 nike

我想解析然后遍历一个Markdown文件。我正在寻找类似 xml.etree.ElementTree 的内容但对于 Markdown 。

一种选择是转换为 HTML,然后使用另一个库来解析 HTML。但我想避免这一步。

谢谢。

最佳答案

正如另一条评论所提到的,Python-Markdown 有一个 extension API它恰好在引擎盖下使用 xml.etree.ElementTree 。理论上您可以创建一个扩展来访问该内部 ElementTree 对象并使用它执行您想要的操作。但是,如果您使用原始 HTML(包括 HTML 实体)和/或 codehilite 扩展,您将得到一个不完整的文档,因为有一些后处理器在序列化字符串上运行。所以我不会真的为了你的预期目的重新开始它(完全披露:我是 Python-Markdown 的开发者)。

如果存在 Markdown 实现,则列表相当长 here .在该列表中的纯 Python 实现中,Mistune是我所知道的唯一一个使用两步过程的方法(第一步返回解析树,第二步序列化解析树——你只需要第一步)。我个人从未使用过 Mistune,无法评价其稳定性或准确性,但它应该是非常优秀的 JavaScript 库的 Python 克隆版 Marked .

*** 编辑 ***

一些较新的 Python 包已经可用,它们都在不同程度上使用解析器/渲染器模式和/或解析树/ token 流。我对其中任何一个都没有任何个人经验,但它们可能对此有用。参见 mistletoe , markdown-it-py , 和 marko .

*** 结束编辑 ***

如果您四处搜索,我相信一些 C 实现使用了类似的模式。其中一些甚至可能已经有了 Python 包装器。如果不是,用 ctypes 创建一个包装器应该不会太难。 .

如果出于某种原因你想使用一个没有给你完整解析树的实现,那么我建议使用 LXML 解析生成的 HTML (C 库的 python 包装器)或 html5lib (纯 python),两者都可以返回一个 ElementTree 对象并且速度更快(尤其是 LXML)并且更能容忍无效的 HTML(尤其是 html5lib,它在现实世界中的行为更像真实的浏览器)。请记住,Markdown 可以包含原始 HTML,并且大多数 Markdown 解析器只是简单地传递它,无论是否有效。如果您随后尝试使用基于 XML 的解析器(如 xml.etree 中)或严格的 HTML 解析器(如标准库中的 html.parser)解析它,则单个无效标记可能会使 HTML 解析器崩溃。

关于python - 解析和遍历 Markdown 文件中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27349951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com