使用正则表达式在Pentaho中进行数据验证

时间:2013-11-19 11:49:21

标签: regex pentaho kettle

我有这些样本数据。 (当前余额是数字字段,并且有一些需要替换的错误记录)

Accno,Cust_id,gender,DOB,Current_balance
0008647447654709299,87128110,M,29/02/1960,184126.23
0008650447626799299,143500723,F,4/18/1967,165198.85
0008651447674209299,479941323,M,5/5/1979,NULL
0008653447693589299,687746622,M,18-08-1981,#20
0008654447606469299,890134223,M,18-08-1983,0
0008655447659179299,684451923,F,10/9/1982,142.25
0008658447686789299,57470921,F,25-02-1978,458518.25
0008669447629759299,57470925,M,23-01-1981,xx

我需要验证Pentaho中的数据,并希望输出如下:

Accno,Cust_id,gender,DOB,Current_balance
0008647447654709299,87128110,M,29/02/1960,184126.23
0008650447626799299,143500723,F,4/18/1967,165198.85
0008651447674209299,479941323,M,5/5/1979,
0008653447693589299,687746622,M,18-08-1981,
0008654447606469299,890134223,M,18-08-1983,0
0008655447659179299,684451923,F,10/9/1982,142.25
0008658447686789299,57470921,F,25-02-1978,458518.25
0008669447629759299,57470925,M,23-01-1981,

这意味着验证器传递好行并将这些错误数据替换为空值。 任何人都可以建议我怎么做?

1 个答案:

答案 0 :(得分:1)

我不确定Pentaho,但为了指出正确的方向,你可以使用以下正则表达式:

,(?=[^,]+$)(?!\d+(\.\d{2})).*$

多行模式

如果您使用','替换所有匹配项,则应该具有所需的输出。

Working on RegexPal


RegexPlanet将其转换为以下Java正则表达式(看起来你只需要转义反斜杠):

,(?=[^,]+$)(?!\\d+(\\.\\d{2})).*$

所以在Java中我猜你会使用类似的东西:

str.replaceAll("(?m),(?=[^,]+$)(?!\\d+(\\.\\d{2})).*$", ",");

开头的(?m)是上面提到的多行标志。