我正在寻找一个低于价格的正则表达式,然后让我将它们解析为其他格式:
我已经尝试过正则表达式:
([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)
;
}
答案 0 :(得分:1)
对工作解决方案的最佳猜测:
这是非常务实的,假设价格不能超过2位小数。否则问题没有解决方案:是不可判定的。
答案 1 :(得分:0)
对于类似这样的事情,您可能希望使用交替分别解析每个模式。
尝试这样的事情:
([\d.]+)(?:[,](\d{1,2}(?![\d.,])))|([\d,]+)(?:[.](\d{1,2}(?![\d.,])))|(\d+)
它可以匹配组1和2,3和4或5。