java - 从字符串中的金额中提取数字

标签 java regex

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

strAmountString =“24 个月 272.94 美元/月 常规价格 - 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,上面的函数工作正常。

但是当我必须从字符串 strAmountString = "272.94" 中提取 272.94 时,给我一个 null。

此外,我还必须从 string strAmountString = "$272.94/mo for 24 Month Regular Price -$336.9"中提取金额 -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

关于java - 从字符串中的金额中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314225/

相关文章:

java - 如何在 Java 中获取 HBase 的行键

java - 在无序数组中找到最近的数字

c# - c# 中货币值(value)的 RegEx 验证

php - 如何通过多个定界符分解字符串并保留定界符?

javascript - Javascript 中带有数字点的模式验证

c++ - C++:如何使用正则表达式从字符串中提取单词

java - 使用自定义比较器对基元数组进行排序,而不转换为对象

java - Java 如何在非常小的设备上运行?

Python 2.7 无法在使用 Regex re.findall 后使用 DictWriter 从 DictReader 中写出文件

java - 从我的 JButtons 获取颜色