Если вам не нужно использовать регулярное выражение, вы можете использовать
s="(Canberra)-[:capital_of {}]->(Australia)"
entityA = s[1:].split(')-')[0]
entityB = s.split('->(')[-1][:-1]
Входная строка разбивается на основе вхождения подстроки ')-'
, и первая часть берется для получения первогосущность.
split()
выполняется на основе подстроки '->('
, и для получения второй сущности выбирается последнее разбиение.
Итак,
print(f'EntityA: {entityA}')
print(f'EntityB: {entityB}')
даст
EntityA: Canberra
EntityB: Australia
Решения без регулярных выражений, как правило, быстрее.
Редактировать: Сроки согласно запросу в комментариях.
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)