RegEx - Как извлечь цену? - PullRequest
6 голосов
/ 12 марта 2010

Как мне извлечь сумму в долларах из следующей строки

"некоторый текст будет идти сюда все больше и больше, и тогда будет какая-то цена $ 34,03, но это не значит, что строка закончится"

Я хочу извлечь $ 34.03 ... также хочу извлечь, если нет центов

"некоторый текст будет идти сюда все больше и больше, и тогда будет определенная цена 34 доллара, но это не значит, что строка закончится"

Здесь я хочу извлечь $ 34

Ответы [ 5 ]

19 голосов
/ 12 марта 2010

Я не гуру-регулярник, но смог набрать следующее с помощью RegExr .

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

Совпадения $35.03 и $35. Чтобы принимать форматы, такие как $35,000.52, вам необходимо включить ,

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

Скорее всего, это можно улучшить, но из моих предварительных тестов все работает просто отлично.

2 голосов
/ 12 марта 2010
'/\$\d+(?:\.\d+)?/'

if(preg_match('/\$\d+(?:\.\d+)?/',$text,$matches)){
    echo $matches[0]; //which would be $34 or $34.03
}
1 голос
/ 17 декабря 2014

В настоящее время я работаю над небольшой функцией, использующей регулярное выражение для получения суммы цены внутри строки:

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

12,11 € -> 12,11

12,999 € -> 12,99

12,9 € -> 12,9

£ 999,99 € -> 999,99

...

1 голос
/ 12 марта 2010

Как насчет этого регулярного выражения: \$[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.

1 голос
/ 12 марта 2010

Поскольку вы не упомянули конкретный движок регулярных выражений, возможно, вам придется немного его настроить:

/(\$\d+(\.\d+)?)/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...