Neo4j Cypher:从 RE 获取数据

Neo4j Cyper: Get data from RE

我想要的是从我的正则表达式中的 属性 和 return 一个名称以及该名称出现多少次的计数中获取信息 - 所有这些都用密码表示。我的猜测是这样的:

MATCH (t:Tweet)
WHERE t.body =~ "@(.*?) .*" = k
RETURN k as name, count(k) as number

解决方法当然是这样做:

MATCH (t:Tweet)
WHERE t.body =~ "@.*"
RETURN t

然后用其他语言来做,比如 python - 这不是我想要的

不幸的是,您不能用 cypher 做您想做的事。正则表达式只是为了匹配。但为了您的确认,这里有两个具有类似问题的相关 Whosebug 问题,但与我在此处提供的答案相同:Using regex capture groups in cypher and Using regex beyond matching in cypher.

关于其中一个问题,Michael Hunger 就面对这些情况给出了很好且适当的建议:

In general, when I run into problems like what you're facing, I try to deal with them prior to the import step. I.e. you might start with data, massage it into CSV, and then load the CSV into a graph. During the manipulation of the CSV, I'd do the pattern matching with some other tool (sed/awk/perl/python/whatever) and then modify the data before it gets loaded into the graph to do this sort of thing.

对于您的问题,您将无法避免在单独的工具中进行处理。但是当然,无论您选择如何做,您始终可以使用包含答案的属性更新节点,然后基于该属性进行查询。这是一种解决方法,但我认为这准确地反映了您的选择。