货币由逗号值的字符串分割(Currency values string split by comma

2019-06-28 07:14发布

我有一个包含格式的货币值,如字符串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

可能有人请帮助我吗?

Answer 1:

你需要一个正则表达式“向后看” (?<=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


Answer 2:

你也可以使用不同的正则表达式匹配,你要搜索的模式(那么它并不真正重要的分隔符是什么):

 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


文章来源: Currency values string split by comma