正则表达式帮助在数据中匹配csv样式的数据字符串

时间:2017-01-22 16:54:15

标签: java regex parsing

所以我正在解析一个文件,我正在将我的行字符串写成由,分隔的CSV。我的问题是同一行字符串中有货币,也可以用,

分隔

示例:

84330CAX4mPWy2016112903,CAX4mPWy,2016-11-29-14.07.07.000000,CAD,$55,000.00,somename
                                                                   ^

有时美元金额小于1000,因此,不会发生,但有时会更高。

我在考虑使用正则表达式,如果$前面有多个,,它会找到\d并替换$

2 个答案:

答案 0 :(得分:1)

对一个或多个数字使用正向前瞻,前面有一个非数字,一个或多个数字和逗号。 这对你有用:

public static void main(String[] args){
    String s = "84330CAX4mPWy2016112903,CAX4mPWy,2016-11-29-14.07.07.000000,CAD,$55,000.00,somename";
    System.out.println(s.replaceAll("(\\D\\d+),(?=\\d+)", "$1"));
}

O / P:

84330CAX4mPWy2016112903,CAX4mPWy,2016-11-29-14.07.07.000000,CAD,$55000.00,somename

答案 1 :(得分:0)

这样做的方法取决于您的需求。

我会将值分组:

private static final String STRING_TO_PARSE = "84330CAX4mPWy2016112903,CAX4mPWy,2016-11-29-14.07.07.000000,CAD,$55,000.00,somename";
public static void main(String[] args) {
    Matcher matcher = Pattern.compile("(.+),(.+),(.+),(.+),(\\$[\\d,]+\\.\\d\\d),(.+)").matcher(STRING_TO_PARSE);
    matcher.find();
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println(matcher.group(i));
    }
}