价格的正则表达式 - Android

时间:2017-08-09 12:20:47

标签: java android regex regular-language

我有一个string如下:

dfdfm;lg 2500$ jshfsnefsfz5405€mnvkjdf64rfmkd554668¢ odsfrknegj 885486¥ dsflkef 588525dollar

我正在使用此[\\d,]+\\s*\\$|[\\d,]+\\s*€|[\\d,]+\\s*¥|[\\d,]+\\s*¢|[\\d,]+\\s*dollar

获得波纹管值
  

2500 $   5405€   554668¢   885486¥   588525dollar

问题:但我不需要这些$ € ¢ ¥ dollar。如何在顶级正则表达式中删除这些?

这是我的方法:

private String getPrice(String caption) {
    String pricePattern = "[\\d,]+\\s*\\$|[\\d,]+\\s*€|[\\d,]+\\s*¥|[\\d,]+\\s*¢|[\\d,]+\\s*dollar|[\\d,]+\\s*Euro";
    List<String> lstPrice = new ArrayList<>();
    Pattern rPrice = Pattern.compile(pricePattern);
    Matcher mPrice = rPrice.matcher(caption);
    while (mPrice.find()) {
        lstPrice.add(mPrice.group());
    }
    if (lstPrice.size() > 0) {
        return lstPrice.get(0);
    }
    return "";
}

2 个答案:

答案 0 :(得分:0)

您可以尝试使用 replaceAll

  

替换匹配的输入序列的每个子序列   具有给定替换字符串的模式。

 String pricePattern="2500$ 5405€ 554668¢ 885486¥ 588525dollar";  
 pricePattern= pricePattern.replaceAll("[^\\d+]", " "); //2500 5405 554668 885486 588525

检查 Java Demo

答案 1 :(得分:0)

如果您需要返回所有价格,请确保getPrice方法返回List<String>并调整正则表达式以匹配价格但仅捕获数字:

private List<String> getPrice(String caption) {
    String pricePattern = "(?i)(\\d[\\d,]*)\\s*(?:[$€¥¢]|dollar|Euro)";
    List<String> lstPrice = new ArrayList<>();
    Pattern rPrice = Pattern.compile(pricePattern);
    Matcher mPrice = rPrice.matcher(caption);
    while (mPrice.find()) {
        lstPrice.add(mPrice.group(1));
    }
    return lstPrice;
}

请参阅Java demo online

String s = "dfdfm;lg 2500$ jshfsnefsfz5405€mnvkjdf64rfmkd554668¢ odsfrknegj 885486¥ dsflkef 588525dollar";
System.out.println(getPrice(s)); 

返回

[2500, 5405, 554668, 885486, 588525]

模式详情

  • (?i) - 不区分大小写的修饰符(嵌入标记选项)
  • (\\d[\\d,]*) - 第1组捕获数字,然后是0+数字或,
  • \\s* - 0+ whitespaces
  • (?:[$€¥¢]|dollar|Euro) - $¥¢dollareuro(不区分大小写的搜索是通过(?i)
  • 启用