我有以下用于从字符串中提取金额的方法。

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.9336.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

08-16 08:05