<p>这看起来像是某种<code>DSL</code>,一种<strong>d</strong>omain<strong>s</strong>特定的<strong>l</strong>语言,因此您可以为它编写一个小型解析器。这里,我们使用<a href="https://github.com/erikrose/parsimonious" rel="nofollow noreferrer"><strong>a ^{<cd2>} parser called ^{<cd3>}</strong></a>。你知道吗</p>
<p>您需要一个小语法和一个<code>NodeVisitor</code>类:</p>
<pre><code>from parsimonious.grammar import Grammar
from parsimonious.nodes import NodeVisitor
path = "(Canberra)-[:capital_of {}]->(Australia)"
class PathVisitor(NodeVisitor):
grammar = Grammar(
r"""
path = (pair junk?)+
pair = lpar notpar rpar
lpar = ~"[(\[]+"
rpar = ~"[)\]]+"
notpar = ~"[^][()]+"
junk = ~"[-:>]+"
"""
)
def generic_visit(self, node, visited_children):
return visited_children or node
def visit_pair(self, node, visited_children):
_, value, _ = visited_children
return value.text
def visit_path(self, node, visited_children):
return [child[0] for child in visited_children]
pv = PathVisitor()
output = pv.parse(path)
print(output)
</code></pre>
<p>这将产生</p>
<pre><code>['Canberra', ':capital_of {}', 'Australia']
</code></pre>