货币值字符串由逗号分隔

我有一个字符串,其中包含格式化的货币值,如45,890.00和多个值由逗号分隔,如45,890.00,12,345.00,23,765.34,56,908.50 ..

我想提取并处理所有货币值,但无法找出正确的正则表达式,这就是我所尝试的

 public static void main(String[] args) { String currencyValues = "45,890.00,12,345.00,23,765.34,56,908.50"; String regEx = "\\.[0-9]{2}[,]"; String[] results = currencyValues.split(regEx); //System.out.println(Arrays.toString(results)); for(String res : results) { System.out.println(res); } } 

这个输出是:

 45,890 //removing the decimals as the reg ex is exclusive 12,345 23,765 56,908.50 

有人可以帮我这个吗?

你需要一个正则表达式“后面看” (?<=regex) ,它匹配,但消耗:

 String regEx = "(?<=\\.[0-9]{2}),"; 

这是你现在正在使用的测试用例:

 public static void main(String[] args) { String currencyValues = "45,890.00,12,345.00,23,765.34,56,908.50"; String regEx = "(?<=\\.[0-9]{2}),"; // Using the regex with the look-behind String[] results = currencyValues.split(regEx); for (String res : results) { System.out.println(res); } } 

输出:

 45,890.00 12,345.00 23,765.34 56,908.50 

您还可以使用不同的正则表达式来匹配您正在搜索的模式(那么分隔符的作用并不重要):

  String currencyValues = "45,890.00,12,345.00,23,765.34,56,908.50,55.00,345,432.00"; Pattern pattern = Pattern.compile("(\\d{1,3},)?\\d{1,3}\\.\\d{2}"); Matcher m = pattern.matcher(currencyValues); while (m.find()) { System.out.println(m.group()); } 

版画

 45,890.00 12,345.00 23,765.34 56,908.50 55.00 345,432.00 

正则表达式的解释:

  • \\d匹配一个数字
  • \\d{1,3}匹配1-3位数
  • (\\d{1,3},)? 可选地匹配1-3个数字后跟逗号。
  • \\. 匹配一个点
  • \\d{2}匹配2位数。

但是,我也会说使用逗号作为分隔符可能不是最好的设计,可能会导致混淆。

编辑:

正如@tobias_k指出: \\d{1,3}(,\\d{3})*\\.\\d{2}将是一个更好的正则表达式,因为它将正确匹配:

  • 1,000,000,000.00

它不会错误地匹配:

  • 1,00.00