Запрос Cypher с регулярным выражением выдает ошибку при использовании в Python - PullRequest
0 голосов
/ 09 мая 2019

У меня есть запрос Cypher, который действует как предложение LIKE, и он отлично работает при непосредственном использовании в Neo4J.

MATCH (u:User) WHERE u.username =~ '(?i).*SUBSTRING.*' RETURN u;

Но как только запрос помещается в строковую переменную в python, он выдает ошибку.

Код Python:

def get_search_results(self, user_input):
        query = "MATCH (u:User) WHERE u.username =~ '(?i).*{user_input}.*' RETURN u; "
        return graph.run(query, {"user_input": user_input}).data()

выдает ошибку:

ClientError: SemanticError: Invalid Regex: Illegal repetition near index 5
(?i).*{user_input}.*
     ^

Я проверил онлайн, чтобы проверить, действительно ли регулярное выражение, и, кажется, оно работает просто отлично. Есть ли что-то простое, что я просто забываю о питоне и о том, как он обрабатывает регулярные выражения?

1 Ответ

0 голосов
/ 09 мая 2019

Регулярное выражение думает, что вы пытаетесь указать, сколько раз .* следует повторить. Попробуйте это:

query = "MATCH (u:User) WHERE u.username =~ '(?i).*\{user_input\}.*' RETURN u; "

В регулярном выражении, если вы хотите указать, сколько раз символ повторяет a, следует использовать a{start, end}, где повторения должны быть между start и end. Компилятор подумал, что вы хотите повторить .* несколько раз, что недопустимо. Итак, вам нужно вырваться из скобок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...