擅长:python、mysql、java
<p>有几件事:</p>
<p>在<code>tag</code>的定义中,您将其包装为<code>Group</code>,但我认为您确实希望使用<code>Combine</code>。在</p>
<p>第二件事,你在<code>exp</code>中的嵌套混合了重复和递归。在</p>
<p>这对我很有用(同样,以<code>dot</code>上的<code>.suppress()</code>为例):</p>
<pre><code>tag = pp.Combine(
lang +
pp.Word(pp.alphas, pp.alphanums) +
pp.Optional(dot + cstr) +
rang).setName("tag")
exp = pp.Forward()
key_value = pp.Group(tag + exp)
number = pp.Regex(r'[+-]?\d+(\.\d*)?').setName("number")
exp <<= (number |
cstr |
key_value |
pp.Group(lbra + pp.ZeroOrMore(exp) + rbra))
</code></pre>
<p>给予:</p>
^{pr2}$