正则表达式的Cypher查询在Python中使用时出现错误

时间:2019-05-09 17:51:17

标签: python regex neo4j cypher

我有一个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}.*
     ^

我已经在线检查了正则表达式是否有效,并且看起来工作正常。有什么我忘了python及其处理正则表达式的基本方法吗?

1 个答案:

答案 0 :(得分:0)

正则表达式认为您正在尝试指定应该重复.*的次数。试试看:

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

在正则表达式中,如果要指定一个字符重复说a的次数,请使用a{start, end},其中重复应该在start和{{1}之间}。编译器认为您想多次重复end,这是不允许的。因此,您需要逃脱括号。