如何匹配在间隔中定义了起始字母的名称
How to MATCH names which starting letters are defined in an interval
我有一个电影数据集,其中包含导演和女演员的名字。我想抓取所有以 B 到 J 之间的字母开头的女演员名字。除了使用 'OR' MATCH (a:ACTOR)-[:PLAYED]-> (:MOVIE) WHERE a.Name STRATS WITH 'B' OR a.Name STARTS WITH 'C' ...
,还有更复杂的方法吗?
我很感激任何关于此事的建议。
你可以使用 Cypher Regular expressions
MATCH (a:ACTOR)-[:PLAYED]->(:MOVIE)
WHERE toLower(a.name) =~ '[b-j].*'
RETURN a
正在检查以 b 和 j 之间的字符开头的所有名称。末尾的通配符匹配所有后缀。
您也可以使用 IN,但在这种情况下您必须提供要匹配的整个字符列表:
MATCH (a:ACTOR)-[:PLAYED]->(:MOVIE)
WHERE left(toLower(n.name),1) in ['b','c','d','e','f','g','h','i','j']
RETURN n.name
我在这两种情况下都使用了 toLower
以确保匹配不区分大小写。
在第二种方法中,我使用 left
函数获取名称的第一个字符并检查它是否在给定列表中。
存在 Starts With
运算符。但它不允许匹配列表 (IN)。
我有一个电影数据集,其中包含导演和女演员的名字。我想抓取所有以 B 到 J 之间的字母开头的女演员名字。除了使用 'OR' MATCH (a:ACTOR)-[:PLAYED]-> (:MOVIE) WHERE a.Name STRATS WITH 'B' OR a.Name STARTS WITH 'C' ...
,还有更复杂的方法吗?
我很感激任何关于此事的建议。
你可以使用 Cypher Regular expressions
MATCH (a:ACTOR)-[:PLAYED]->(:MOVIE)
WHERE toLower(a.name) =~ '[b-j].*'
RETURN a
正在检查以 b 和 j 之间的字符开头的所有名称。末尾的通配符匹配所有后缀。
您也可以使用 IN,但在这种情况下您必须提供要匹配的整个字符列表:
MATCH (a:ACTOR)-[:PLAYED]->(:MOVIE)
WHERE left(toLower(n.name),1) in ['b','c','d','e','f','g','h','i','j']
RETURN n.name
我在这两种情况下都使用了 toLower
以确保匹配不区分大小写。
在第二种方法中,我使用 left
函数获取名称的第一个字符并检查它是否在给定列表中。
存在 Starts With
运算符。但它不允许匹配列表 (IN)。