我想从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。
以任何方式获取货币数量?
答案 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
修改强>
当我有两种货币时,我必须在正则表达式中写什么? 1000美元和 1000EUR
在这种情况下,您可以使用此正则表达式(([0-9]+\s?)+)(\$|EUR)
,它可以匹配$
符号和EUR
String regex = "(([0-9]+\\s?)+)(\\$|EUR)";
<强> 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