2024-03-29 12:56:47 发布
网友
我想获取以下经过重组的文本片段,其中包含一个substitution definition:
text = """ |python| .. |python| image:: python.jpg """
并解析定义,以便显示替换文本:
在docutils或其他模块中是否有一个函数或实用程序可以做到这一点?在
看看Docutils Hacker's Guide。它解释了docutils的工作原理。在
您可以对通过解析输入文件而生成的节点树应用适当的Transform来解决问题。应用转换后,您应该使用Writer对象再次输出RestructedText。这个作者还不存在,所以你必须先创建它。在
Transform
Writer
docutils提供{a1}将docutils用作库。在
docutils
因此使用docutils.core.publish_string可能是您的用例的一个选项。在
docutils.core.publish_string
In [90]: from docutils import core In [91]: text = '|python|\n\n.. |python| image:: python.jpg\n' 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派生的自定义writer类。 我不确定如何实现这一点,也许SphinxTextWriter可以作为一个起点。在
puplish_string
pseudoxml
docutils.writers.Writer
Sphinx
似乎如果您真的只需要简单的替换,在文本中使用replace将是一个更简单的解决方案,如果您需要更复杂的事情,使用docutils实现这一点也很复杂。在
replace
我不确定我是否完全理解这个问题,但下面是一个使用列表理解的提取方法:
extracted_line = [x for x in text.split("\n") if x[:2] == ".."][0] resolved_text = """{}""".format(extracted_line.replace("|python|",""))
如果需要多次出现sub-def,则需要添加一些逻辑。在
看看Docutils Hacker's Guide。它解释了docutils的工作原理。在
您可以对通过解析输入文件而生成的节点树应用适当的
Transform
来解决问题。应用转换后,您应该使用Writer
对象再次输出RestructedText。这个作者还不存在,所以你必须先创建它。在docutils
提供{a1}将docutils用作库。在因此使用
docutils.core.publish_string
可能是您的用例的一个选项。在默认情况下,
puplish_string
使用pseudoxml
编写器,可以在输出中看到。 但是,如果您真的想从问题中得到纯文本输出,那么您需要一个从docutils.writers.Writer
派生的自定义writer类。 我不确定如何实现这一点,也许Sphinx
TextWriter可以作为一个起点。在似乎如果您真的只需要简单的替换,在文本中使用
replace
将是一个更简单的解决方案,如果您需要更复杂的事情,使用docutils实现这一点也很复杂。在我不确定我是否完全理解这个问题,但下面是一个使用列表理解的提取方法:
如果需要多次出现sub-def,则需要添加一些逻辑。在
相关问题 更多 >
编程相关推荐