我有一个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及其处理正则表达式的基本方法吗?
答案 0 :(得分:0)
正则表达式认为您正在尝试指定应该重复.*
的次数。试试看:
query = "MATCH (u:User) WHERE u.username =~ '(?i).*\{user_input\}.*' RETURN u; "
在正则表达式中,如果要指定一个字符重复说a
的次数,请使用a{start, end}
,其中重复应该在start
和{{1}之间}。编译器认为您想多次重复end
,这是不允许的。因此,您需要逃脱括号。