簡體   English   中英

如何在python中解析restructuredtext?

[英]How to parse restructuredtext in python?

是否有任何模塊可以將重構文本解析為樹模型?

docutils或sphinx可以這樣做嗎?

Docutils確實包含了執行此操作的工具。

你可能想要的是docutils.parsers.rst的解析器

有關所涉及的詳細信息,請參閱此頁面 docutils/examples.py中也有一些例子 - 特別是檢查internals()函數,這可能是有意義的。

我想擴展Gareth Latty的答案。 “你可能想要的是docutils.parsers.rst的解析器”是答案的一個很好的起點,但下一步是什么? 即:

如何在python中解析restructuredtext?

下面是Python 3.6和docutils 0.14的確切答案:

import docutils.nodes
import docutils.parsers.rst
import docutils.utils

def parse_rst(text: str) -> docutils.nodes.document:
    parser = docutils.parsers.rst.Parser()
    components = (docutils.parsers.rst.Parser,)
    settings = docutils.frontend.OptionParser(components=components).get_default_values()
    document = docutils.utils.new_document('<rst-doc>', settings=settings)
    parser.parse(text, document)
    return document

並且可以使用例如下面的處理來處理結果文檔,這將打印文檔中的所有引用:

class MyVisitor(docutils.nodes.NodeVisitor):

    def visit_reference(self, node: docutils.nodes.reference) -> None:
        """Called for "reference" nodes."""
        print(node)

    def unknown_visit(self, node: docutils.nodes.Node) -> None:
        """Called for all other node types."""
        pass

以下是如何運行它:

doc = parse_rst('spam spam lovely spam')
visitor = MyVisitor(doc)
doc.walk(visitor)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM