Python docstring + Neo4J cypher查询似乎导致正则表达式错误

时间:2017-04-05 16:52:28

标签: python neo4j cypher

我有一个像这样的密码片段:

where my_node.my_column =~ ("(?i).*\\." + {my_var}) 

这个想法是匹配一个类似路径的字符串。例如,my_column的值可能为db.schema.MY_TABLE,我想在Python cypher语句中传递“My_TaBlE”。这应该匹配。

但是,我在该声明中收到了Cypher错误;具体来说,它不喜欢最后的“。”在正则表达式中。这就像我没有正确地逃避它。文档说Java regexp是在幕后使用的。

现在我正在使用:

where my_node.my_column =~ ('(?i).*' + '.' + {table_name})

这似乎有效,但我不能说老是否匹配任何字符或字面句字符。

如果重要,我的Cypher查询是在Python文档字符串中。

我怎样才能逃脱这段时期?有没有更好的方式来表达我想要的东西?

1 个答案:

答案 0 :(得分:0)

在Python string literals中,反斜杠(“\”)字符用于启动转义序列。特别是,“\\”是反斜杠字符本身的转义序列。

因此,为了生成一个包含2个相邻反斜杠字符的字符串文字,实际上需要在代码中使用4个相邻的反斜杠字符。例如,您的Python代码段应如下所示:

where my_node.my_column =~ ("(?i).*\\\\." + {my_var})