neo4j/Regex:Cypher string REPLACE()仅将字符串段替换为字符串的结尾或开头
在{search}上有更多条件的地方,比如从字符串的开头到分隔符,或者从分隔符到字符串的结尾,在cypher中是否有一种替换(n.propertyvalue,{search},{REPLACE})的方法 例如,{search}是123,{replace}是000: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)
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" │
└────────────────────┴────────────────────┘