仅使用货币Java从Text获取数字

时间:2017-07-30 19:50:26

标签: java regex string numbers

我想从String中获取有货币的数字。 例如:

String text = "player number 8 have a nice day. the price is 1 000 $ or you have to pay 2000$.";

所以我想要的输出:

1000,2000

我用这个:

String tmp = text.replaceAll("[^0-9]+", " ");
List<String> digitsList = Arrays.asList(tmp.trim().split(" "));

但我的输出是:

8,000,2000

如果编号如下所示,是否可以从文本中获取数字:1 000,30 000。

以任何方式获取货币数量?

1 个答案:

答案 0 :(得分:4)

你可以使用这个正则表达式(([0-9]+\s?)+)\$这样的模式,这意味着一个或多个degit后面可以跟一个空格,所有这一切都带有一个固有符号$

String text = "player number 8 have a nice day. the price is 1 000 $ or you have to pay 2000$.";
String regex = "(([0-9]+\\s?)+)\\$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);

while (matcher.find()) {                                                
    System.out.println(matcher.group(1));
}

结果

1 000
2000

regex demo

修改

  

当我有两种货币时,我必须在正则表达式中写什么? 1000美元和   1000EUR

在这种情况下,您可以使用此正则表达式(([0-9]+\s?)+)(\$|EUR),它可以匹配$符号和EUR

String regex = "(([0-9]+\\s?)+)(\\$|EUR)";

regex demo 2

<强> EDIT2

  

我测试了这个,我找到了另一个陷阱。当我有 2000,00 $和1   000,00欧元我得到00,00 。所以我必须添加到正则表达式给我   的 2000,1000

     

最后一个例子:我有: 1000美元和5 000欧元以及2 000,00美元和   3000,00 EUR 输出应为: 1000,5000,2000,3000 ,任何正则表达式   此?

在这种情况下,您可以使用此正则表达式(([0-9]+[\s,]*)+)(\$|EUR),它可以允许数字之间的空格和逗号,然后当您得到结果时,您可以将所有非degit替换为空,如下所示:

String text = "1000$ and 5 000 EUR and 2 000 , 00 $ and 3000,00 EUR";
//1000,5000,2000,3000
String regex = "(([0-9]+[\\s,]*)+)(\\$|EUR)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);

while (matcher.find()) {
    System.out.println(matcher.group(1).replaceAll("[^0-9]", ""));
    //                                              ^^^^^^--------to get only the degits
}

<强>输出

1000
5000
200000
300000

regex demo 3