正则表达式为不同的价格格式

时间:2015-03-01 00:28:46

标签: java regex

我正在寻找一个低于价格的正则表达式,然后让我将它们解析为其他格式:

  • 之前 - >之后
  • 2,232.99 - > 2232.99
  • 8224.56 - > 8224.56
  • 1125,59 - > 1125.59
  • 345,99 - > 345.99
  • 34.00 - > 34.00
  • 431.333,0 - > 431333.00
  • 34,99 - > 34,99
  • 234.99 - > 234.99
  • 42 - > 42.00

我已经尝试过正则表达式:

([0-9]?)[,.]?([0-9]{0,3})[,.]?([0-9]{0,2})

匹配,但很难找到哪一组是便士价值。我想做的是将其分成千,百和便士的价值,然后只是

return matcher.group(1) +matcher.group(2)
        + "." +matcher.group(3);

我对任何其他想法如何解析它持开放态度。

我要测试的代码:

public static void main(String [] args){
       String[] testCases={"2,232.99", "8224.56", "1125,59", "345,99", "34.00", "431.333", "34,99", "234.99", "42"};
        for (int i=0;i<testCases.length;i++){
            System.out.println(parseLine(testCases[i]));
        }
    }


public static String parseLine(String string){
    System.out.println(string);
    Matcher matcher = Pattern.compile(
                    "([0-9]{0,3})[,.]?([0-9]{0,3})[,.]?([0-9]{0,2})"
                    ).matcher(string);

    matcher.matches();
    return "group 1: "+matcher.group(1)
            + " group 2: " +matcher.group(2)
            + " group 3: " +matcher.group(3)
            ;

}

2 个答案:

答案 0 :(得分:1)

对工作解决方案的最佳猜测:

  1. 全部替换,用。
  2. 删除除最后一个之外的所有内容。
  3. 格式化数字
  4. 这是非常务实的,假设价格不能超过2位小数。否则问题没有解决方案:是不可判定的。

答案 1 :(得分:0)

对于类似这样的事情,您可能希望使用交替分别解析每个模式。

尝试这样的事情:

([\d.]+)(?:[,](\d{1,2}(?![\d.,])))|([\d,]+)(?:[.](\d{1,2}(?![\d.,])))|(\d+)

它可以匹配组1和2,3和4或5。