我有这些样本数据。 (当前余额是数字字段,并且有一些需要替换的错误记录)
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,
这意味着验证器传递好行并将这些错误数据替换为空值。 任何人都可以建议我怎么做?
答案 0 :(得分:1)
我不确定Pentaho,但为了指出正确的方向,你可以使用以下正则表达式:
,(?=[^,]+$)(?!\d+(\.\d{2})).*$
在多行模式
中如果您使用','
替换所有匹配项,则应该具有所需的输出。
RegexPlanet将其转换为以下Java正则表达式(看起来你只需要转义反斜杠):
,(?=[^,]+$)(?!\\d+(\\.\\d{2})).*$
所以在Java中我猜你会使用类似的东西:
str.replaceAll("(?m),(?=[^,]+$)(?!\\d+(\\.\\d{2})).*$", ",");
开头的(?m)
是上面提到的多行标志。