我有以下用于从字符串中提取金额的方法。strAmountString = "$272.94/mo for 24 months Regular Price -$336.9"
public static String fnAmountFromString(String strAmountString) {
String strOutput = "";
Pattern pat = Pattern.compile("\\$(-?\\d+.\\d+)?.*");
Matcher mat = pat.matcher(strAmountString);
while(mat.find())
strOutput = mat.group(1);
return strOutput;
}
现在,我必须从字符串中提取字符串
272.94
,并且上述函数可以正常工作。但是当我必须从字符串
272.94
中提取strAmountString = "272.94"
时,给我一个空值。我也必须从
-336.9
提取金额string strAmountString = "$272.94/mo for 24 months Regular Price -$336.9"
最佳答案
尝试使用272.94
的第一个问题与正则表达式的要求有关,即String
必须由$
开头的事实
您可以将$
作为可选组的一部分,例如((\\$)?\\d+.\\d+)
,它将同时匹配272.94
和$272.94
,但不会直接匹配-$336.9
,尽管它将匹配$336.9
。
因此,以您的示例为例,您可以使用((-)?(\\$)?\\d+.\\d+)
,它现在也将与-$336.9
匹配...
就我个人而言,我可能会使用((-)?(\\$)?(-)?\\d+.\\d+)
,它将匹配-$336.9
,$-336.9
,-336.9
和336.9
下一步是尝试从结果中删除$
,是的,您可以尝试使用其他正则表达式,但是老实说,String#replaceAll
会更容易...
注意-我的正则表达式知识非常基础,因此可能更简单
更新了示例
String value = "$272.94/mo for 24 months Regular Price -$336.9";
String regExp = "((-)?(\\$)?(-)?\\d+.\\d+)";
Pattern p = Pattern.compile(regExp);
Matcher matcher = p.matcher(value);
while (matcher.find()) {
System.out.println(matcher.group());
}
哪个输出...
$272.94
-$336.9