使用regex加载CSV条件处理(Syntaxproblem)



csv文件在一列中包含日期格式(如"2016-12-01T00:00+01")或其他值(如整数)。

我的想法是在运行loadCSV时,像if-else语句一样进行切换,要么将日期转换为unix时间戳,要么根本不更改值。为了检测它是否是日期,我尝试使用正则表达式。

我提出了以下陈述

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///xxx.csv" AS row 
FIELDTERMINATOR ';'
FOREACH(n IN (CASE row.dataValue=~ "/(d{4})-(d{2})-(d{2})T(d{2}):(d{2}):(d{2})[+-](d{2})"  THEN [] else [row.dataValue= apoc.date.parse(row.dataValue, "s", "yyyy-mm-dd'T'HH:mm:ss+01")] END) |
CREATE (d:datapoint {data: row.dataValue})
return d

THis抛出一个错误:输入"d"无效:应为。。。这似乎是指正则表达式中的第一个字母d。

a) 什么是正确的语法

b) 为了得到我想要的,这个说法正确吗?

任何提示都将不胜感激。

尝试使用[0-9]而不是\d。我不知道这是否是你的问题,但你的正则表达式似乎很好(除了开头的第一个正斜杠)。

试试这样的东西:

[0-9]{4}-[0-9]{2}-[0-9]{2}T(?:[0-9]{2}:){2}[0-9]{2}[-+][0-9]{2}

https://regex101.com/r/fqydFq/1

最新更新