擅长:python、mysql、java
<p>如果不需要使用regex,可以使用</p>
<pre><code>s="(Canberra)-[:capital_of {}]->(Australia)"
entityA = s[1:].split(')-')[0]
entityB = s.split('->(')[-1][:-1]
</code></pre>
<p>根据<code>')-'</code>子字符串的出现情况拆分输入字符串,并取第一部分来获得第一个实体。你知道吗</p>
<p><code>split()</code>是在<code>'->('</code>子字符串的基础上完成的,最后一次分割被选择来获得第二个实体。你知道吗</p>
<p>所以</p>
<pre><code>print(f'EntityA: {entityA}')
print(f'EntityB: {entityB}')
</code></pre>
<p>会给</p>
<pre><code>EntityA: Canberra
EntityB: Australia
</code></pre>
<p>非正则表达式解决方案通常更快。你知道吗</p>
<p>编辑:根据评论中的要求进行计时。你知道吗</p>
<pre><code>s="(Canberra)-[:capital_of {}]->(Australia)"
def regex_soln(s):
pattern = r'\((.*)\)\-\[(:.*)\]\-\>\((.*)\)'
rv = re.match(pattern,s).groups()
return rv[0], rv[-1]
def non_regex_soln(s):
return s[1:].split(')-')[0], s.split('->(')[-1][:-1]
%timeit regex_soln(s)
1.47 µs ± 60.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit non_regex_soln(s)
619 ns ± 30.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
</code></pre>