Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
neo4j/Regex:Cypher string REPLACE()仅将字符串段替换为字符串的结尾或开头_Neo4j - Fatal编程技术网

neo4j/Regex:Cypher string REPLACE()仅将字符串段替换为字符串的结尾或开头

neo4j/Regex:Cypher string REPLACE()仅将字符串段替换为字符串的结尾或开头,neo4j,Neo4j,在{search}上有更多条件的地方,比如从字符串的开头到分隔符,或者从分隔符到字符串的结尾,在cypher中是否有一种替换(n.propertyvalue,{search},{REPLACE})的方法 例如,{search}是123,{replace}是000: CREATE (n:TEST) set n.SWAP_ID="1234_12314123_123"; CREATE (n:TEST) set n.SWAP_ID="123_1312323_1234"; CREATE (n:TEST)

在{search}上有更多条件的地方,比如从字符串的开头到分隔符,或者从分隔符到字符串的结尾,在cypher中是否有一种替换(n.propertyvalue,{search},{REPLACE})的方法

例如,{search}是123,{replace}是000:

CREATE (n:TEST) set n.SWAP_ID="1234_12314123_123";
CREATE (n:TEST) set n.SWAP_ID="123_1312323_1234";
CREATE (n:TEST) set n.SWAP_ID="12434_12314123_123";
CREATE (n:TEST) set n.SWAP_ID="1243_123_1123";
MATCH (n:TEST) set n.WAS_ID=n.SWAP_ID
SET n.SWAP_ID=REPLACE (REPLACE (REPLACE (n.SWAP_ID, '_'+ {search} + '_' , '_'+{replace}+ '_'), '_'+ {search} + '\\$' , '_'+{replace}) , '\\^'+ {search}+'_', {replace}+'_') 
return n.WAS_ID, n.SWAP_ID;
我想:

n.WAS_ID                     n.SWAP_ID
"1234_12314123_123"         "1234_12314123_000"
"123_1312323_1234"          "000_1312323_1234"
"12434_12314123_123"        "12434_12314123_000"
"1243_123_1123"             "1243_000_1123"
但我得到:

n.WAS_ID                     n.SWAP_ID
"1234_12314123_123"         "1234_12314123_123"
"123_1312323_1234"          "123_1312323_1234"
"12434_12314123_123"        "12434_12314123_123"
"1243_123_1123"             "1243_000_1123"
无法识别字符串的结尾和开头。似乎cypher应该能做这个基本的正则表达式,对吧

好像这是5年前出现的:

仍然没有修复吗?

这个怎么样:

apoc.text.replace(apoc.text.replace(apoc.text.replace(n.WAS_ID, "_" + {search} + "_","_" + {replace} + "_"), "^" + {search} + "_",{replace} + "_"),"_" + {search} + "$","_" + {replace})
如果你没有安装APOC插件,你需要先安装

谢谢你,非麦科动物

apoc.text.replace替换正则表达式子字符串中任何正则表达式的每个实例。 我没有用参数测试它,但它会是这样的:

MATCH (n:TEST)
SET n.SWAP_ID=apoc.text.replace (apoc.text.replace (REPLACE(n.WAS_ID, '_'+{search}+'_', '_'+{replace}+'_'), "(_"+{search}+"$)" , "_"+{replace}), "(^"+{search}+")" , {replace} + "_")

附录:不使用参数,但不使用参数。

有一个正则表达式可以处理所有边缘情况,您只需要执行一次替换操作:

SET n.SWAP_ID = apoc.text.replace(
  n.SWAP_ID,
  '(^|(?<=_))' + $search + '($|(?=_))',
  $replace)
产生以下结果:

╒════════════════════╤════════════════════╕
│"x"                 │"y"                 │
╞════════════════════╪════════════════════╡
│"1234_12314123_123" │"1234_12314123_000" │
├────────────────────┼────────────────────┤
│"123_1312323_1234"  │"000_1312323_1234"  │
├────────────────────┼────────────────────┤
│"12434_12314123_123"│"12434_12314123_000"│
├────────────────────┼────────────────────┤
│"1243_123_1123"     │"1243_000_1123"     │
├────────────────────┼────────────────────┤
│"123_123_123"       │"000_000_000"       │
├────────────────────┼────────────────────┤
│"123"               │"000"               │
└────────────────────┴────────────────────┘
UNWIND [
  "1234_12314123_123",
  "123_1312323_1234",
  "12434_12314123_123",
  "1243_123_1123",
  "123_123_123",
  "123"
] AS x
RETURN x, apoc.text.replace(x, "(^|(?<=_))123($|(?=_))", "000") AS y
╒════════════════════╤════════════════════╕
│"x"                 │"y"                 │
╞════════════════════╪════════════════════╡
│"1234_12314123_123" │"1234_12314123_000" │
├────────────────────┼────────────────────┤
│"123_1312323_1234"  │"000_1312323_1234"  │
├────────────────────┼────────────────────┤
│"12434_12314123_123"│"12434_12314123_000"│
├────────────────────┼────────────────────┤
│"1243_123_1123"     │"1243_000_1123"     │
├────────────────────┼────────────────────┤
│"123_123_123"       │"000_000_000"       │
├────────────────────┼────────────────────┤
│"123"               │"000"               │
└────────────────────┴────────────────────┘