在RestructuredText中解决替换

我想采用下面包含替代定义的重组文本片段:

text = """

|python|

.. |python| image:: python.jpg
"""

并解决定义,以便显示替换文本:

resolved_text = """
.. image:: python.jpg

"""

在docutils或其他模块中是否有一个函数或实用程序可以执行此操作?


docutils提供发布者函数来使用docutils作为库。

因此,使用docutils.core.publish_string可能是您的用例的一个选项。

In [90]: from docutils import core

In [91]: text = '|python|nn.. |python| image:: python.jpgn'

In [92]: print core.publish_string(text)
<document source="<string>">
    <paragraph>
        <image alt="python" uri="python.jpg">
    <substitution_definition names="python">
        <image alt="python" uri="python.jpg">

默认情况下, puplish_string使用一个pseudoxml作家,你可以在输出中看到它。 但是,如果您确实希望从问题获得纯文本输出,则需要从docutils.writers.Writer派生的自定义docutils.writers.Writer类。 我不确定如何实现这一点,也许Sphinx TextWriter可能是一个起点。

似乎如果你真的只需要简单的替换,在你的文本上使用replace就是一个更简单的解决方案,如果你需要更复杂的东西,那么使用docutils来实现它也很复杂。


看看Docutils黑客指南。 它解释了docutils的工作原理。

您可能会忽略将适当的Transform应用于通过解析输入文件生成的节点树。 应用转换后,应使用Writer对象再次输出ReStructuredText。 这位作家还不存在,所以你必须先创建它。


不确定我是否完全理解这个问题,但是这里是使用列表理解提取的刺:

extracted_line = [x for x in text.split("n") if x[:2] == ".."][0]
resolved_text = """{}""".format(extracted_line.replace("|python|",""))

如果预计会出现不止一次的子def,则需要添加一些逻辑。

链接地址: http://www.djcxy.com/p/69909.html

上一篇: Resolve Substitutions in RestructuredText

下一篇: AVRISPmkII connection status: Unknown status 0x00