我正在尝试使用一些简单的Markdown文本进行玩耍,并学习Pyparsing和语法。但我立刻遇到了一个问题,我很难解决。我正在尝试解析强调的CommonMark规范的简单版本。在这种设置中,允许嵌套强调,因此
我尝试使用递归定义来匹配这个,但是它没有起作用。以下是一些示例代码:
但我从中得到的是:
*foo *bar* baz*
应该给出:
<em>foo <em>bar</em> baz</em>
我尝试使用递归定义来匹配这个,但是它没有起作用。以下是一些示例代码:
from pyparsing import *
text = Word(printables,excludeChars="*")
enclosed = Forward()
emphasis = QuotedString("*").setParseAction(lambda x: "<em>%s</em>" % x[0],contents=enclosed)
enclosed << emphasis | text
test = """
*foo *bar* bar*
"""
print emphasis.transformString(test)
但我从中得到的是:
<em>foo </em>bar<em> bar</em>
请原谅我的新手问题; 有人能给我指个方向吗?
编辑:
针对abarnert的深入问题,我将提供澄清。 我只是在玩耍,所以可以使用任意限制形式的符号。 我假设只出现单个'*',并且它们不会相互靠近。 这就留下了空格来消除歧义:*后面没有空格表示打开强调,*前面没有空格表示关闭强调。
即使如此,我也不确定如何使用Pyparsing继续下去。 一些基于堆栈的方法,当它们验证为关闭时,推动打开*并将其弹出? 如何使用Pyparsing做到这一点? 还是有更有效的方法吗?