2012-10-14 52 views
12

有沒有可以解析restructuredtext到樹模型的任何模塊?如何在python中解析restructuredtext?

可以docutils或獅身人面像做到這一點?

+1

「哪個更好」徵求意見,所以我將它從問題中刪除。 –

+0

重構文字是什麼意思? –

+1

@IonutHulub http://docutils.sourceforge.net/rst.html –

回答

15

Docutils確實包含這樣做的工具。

你可能想要的是在docutils.parsers.rst

對所涉及的詳細信息,請參閱解析器this pagedocutils/examples.py也有一些例子 - 特別是檢查可能感興趣的internals()函數。

+1

只需補充一點,Docutils是reStructuredText的參考實現,Sphinx構建於Docutils之上。所以是的,Docutils絕對是這個的正確工具。 – Chris

1

我想延續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)