代码之家  ›  专栏  ›  技术社区  ›  st4ck0v3rfl0w

如何提取价格?

  •  5
  • st4ck0v3rfl0w  · 技术社区  · 15 年前

    我如何从下面的字符串中提取美元金额

    “有些文本会在这里出现,越来越多,然后会有34.03美元的价格,但这并不意味着字符串会结束。”

    我想提取34.03美元……如果没有美分也要提取

    “有些文本会出现在这里,越来越多,然后会有34美元的价格,但这并不意味着字符串会结束。”

    这里我想提取34美元

    5 回复  |  直到 10 年前
        1
  •  18
  •   Sampson    11 年前

    我不是雷杰克斯的大师,但能用 RegExr .

    /(\$[0-9]+(\.[0-9]{2})?)/
    

    比赛 $35.03 $35 . 接受以下格式 $35,000.52 你需要包括 ,

    /(\$[0-9,]+(\.[0-9]{2})?)/
    

    这可能会改进,但从我的初步测试来看,它工作得很好。

        2
  •  2
  •   YOU    15 年前
    '/\$\d+(?:\.\d+)?/'
    
    if(preg_match('/\$\d+(?:\.\d+)?/',$text,$matches)){
        echo $matches[0]; //which would be $34 or $34.03
    }
    
        3
  •  1
  •   Kris    15 年前

    由于您没有提到特定的regex引擎,因此可能需要对其进行一些调整:

    /(\$\d+(\.\d+)?)/
    
        4
  •  1
  •   Tobliug    10 年前

    我目前正在使用regex处理一个小函数,以获取字符串中的价格金额:

    private static String getPrice(String input)
    {
        String output = "";
    
        Pattern pattern = Pattern.compile("\\d{1,3}[,\\.]?(\\d{1,2})?");
        Matcher matcher = pattern.matcher(input);
        if (matcher.find())
        {
            output = matcher.group(0);
        }
    
        return output;
    }
    

    这似乎适用于小价格(0.00至999.99)和各种货币:

    12.34美元-12.34美元

    12.34美元-12.34美元

    12.00美元-12.00美元

    12美元-12美元

    12_

    12,11_墍->12,11

    12.999->12.99

    12.9->12.9

    999.99->999.99

        5
  •  1
  •   kenorb    10 年前

    这个regexp怎么样: \$[0-9.,]+ \$([0-9.,]+) 剥去 $ ?

    这很简单,但它几乎可以满足你的需要,它甚至可以捕捉到这样的东西: $1,450.8934 $14.343 .

    当然,缺点是它会抓住 $34.54.23 也。

    或者如果你只想捕捉两个小数: \$[0-9,]+\.[0-9]{2} 它会抓住 $5.23 的一部分 $5.234565 .

    你可以用它 preg_match preg_match_all .