Java 如何从格式化价格中提取价值?
我想要一个java正则表达式,它从价格中提取价值。例如,40250.99美元 我希望表达式输出40250.99。关键的一点是,它只能用正则表达式来完成。我无法执行任何字符串连接或其他与字符串相关的操作。我试过以下方法,但“打乱了一切”。基本上,503.34美元的收益率为503.34美元,但40250.99美元的收益率为40美元Java 如何从格式化价格中提取价值?,java,regex,Java,Regex,我想要一个java正则表达式,它从价格中提取价值。例如,40250.99美元 我希望表达式输出40250.99。关键的一点是,它只能用正则表达式来完成。我无法执行任何字符串连接或其他与字符串相关的操作。我试过以下方法,但“打乱了一切”。基本上,503.34美元的收益率为503.34美元,但40250.99美元的收益率为40美元 String extractionPattern = "[\\$](\\d+(?:\\.\\d{1,2})?)"; String val = " Executive
String extractionPattern = "[\\$](\\d+(?:\\.\\d{1,2})?)";
String val = " Executive billings @ $40,250.99 Starting 2013-01-05 with bi weekly";
Pattern p = Pattern.compile(extractionPattern);
Matcher m = p.matcher(val);
if (m.find())
System.out.println("Found a match:" + m.group(1));
也许有更好的方法可以做到这一点,我将是第一个承认我的正则表达式是非常基本的
String regExp = "\\$[0-9,\\.]+";
String value = "Executive billings @ $40,250.99 Starting 2013-01-05 with bi weekly";
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(value);
// This should result in a list with 1 element of "$40,250.99"
List<String> lstMatches = new ArrayList<String>(5);
while (matcher.find()) {
lstMatches.add(matcher.group());
}
for (String match : lstMatches) {
// Strip off the unrqeuired elements...
match = match.replaceAll("\\$", "");
match = match.replaceAll(",", "");
System.out.println(Double.parseDouble(match));
}
String regExp=“\\$[0-9,\\.]+”;
String value=“从2013-01-05开始,每两周支付一次高管账单@40250.99美元”;
Pattern=Pattern.compile(regExp);
Matcher Matcher=pattern.Matcher(值);
//这将产生一个包含1个元素“$40250.99”的列表
List lstMatches=newarraylist(5);
while(matcher.find()){
lstMatches.add(matcher.group());
}
for(字符串匹配:lstMatches){
//剥去未经修饰的元素。。。
match=match.replaceAll(“\\$”,“”);
match=match.replaceAll(“,”和“”);
System.out.println(Double.parseDouble(match));
}
您甚至可以使用
NumberFormat.getCurrencyInstance().parse(match)
将结果解析回double
,但这将假定输入符合本地要求…您可以使用replace
或replaceAll
方法吗?仅仅是因为你说我不能做任何字符串连接而询问,尽管你在中使用了它,但还是找到了一个匹配项:“+m.group(1)
。如果没有,那么您的问题可能无法用正则表达式解决,因为它无法在一个匹配中返回几个单独的子字符串,因此您将无法删除逗号。请确认:您的示例中是否有输入错误,或者您确实想从$40250.99
中删除逗号,并将其设置为40250.99
?如果您不必删除它,请尝试此“\\$(\\d+(?:,\\d+*(?:\\.\\d{1,2})”
regex。感谢您的回复,但我无法执行任何replaceAll或任何其他字符串操作。这用于第三方系统,该系统将正则表达式作为其命令之一的参数,并提取值。我希望我能访问Java,但我没有。因此,我需要一个提取值的正则表达式。谢谢大家的帮助。