Получить значение цены из строки - PullRequest
2 голосов
/ 16 января 2012

У меня есть строка, где значение цены ($ 544.50) может быть где угодно в строке. Например: ноутбук HP G60-630US: ноутбуки | RadioShack.com -> 259,97 $ (radioshack.com)

Мне нужно получить значение: 259,97 из строки

Для этого я попытался использовать несколько случайных регулярных выражений. Но не повезло!

Может ли кто-нибудь мне помочь, предоставив правильную строку регулярного выражения для извлечения этого значения цены из строки.

Заранее спасибо.

Ответы [ 7 ]

11 голосов
/ 16 января 2012

Это регулярное выражение будет работать с несколькими валютами: $ £ €

[\$\£\€](\d+(?:\.\d{1,2})?)

Пример

1 голос
/ 16 января 2012

[$]?[0-9]*(\.)?[0-9]?[0-9]?

Должно совпадать с символами $ и без.

0 голосов
/ 02 июня 2018

Regex для фильтрации числа: String regex = ([0-9] + [,.]?) + Вы можете использовать его следующим образом:

CurrencySymbol + регулярное выражение regex + CurrencySymbol

0 голосов
/ 14 января 2016

Вот способ заменить и извлечь

Выдержка:

preg_match('/\$([0-9]+[\.]*[0-9]*)/',$string,$matches);
foreach($matches as $match) {
  echo $match."<br>";
}
//echo $matches[0]; for just the first match

Изменить / Заменить:

$string = preg_replace_callback('/\$([0-9]+[\.]*[0-9]*)/', function ($matches) {


            foreach ($matches as $match) {
                // only if value is !empty and higher than 0
                $tmp = str_replace("$", "", $match);
                if ($tmp > 0 && $tmp != "") {
                    //do something to $tmp in this case round to two decimal places
                    return "$" . round($tmp,2);

                }

            }

        }, $string);

Вероятно, есть лучший способ обработки символа в моем примере замены.

0 голосов
/ 09 января 2015

Этот код находит первое десятичное число в строке:

^[^\d]*(\d+|\d+((,|\.)\d{1,2}))(\s|[a-zA-Z)]|€|$).*
  • ищет только числа с разрешенными десятичной запятой 0-2 или запятой
  • без пробелов передили после того, как число
  • не должно заканчиваться каким-либо разделителем (например, 12.12. или 12! не возвращается)
  • число может заканчиваться знаком евро €
  • работает наСША отрицательные числа ($ 1233,50)
0 голосов
/ 16 января 2012

\ $ (\ d * \.? \ D *) должно работать, не оптимально, но, вероятно, полезно.

(Важно: escape $ и., Которые являются специальными символами)

0 голосов
/ 16 января 2012

Что-то вроде этого, вероятно, будет работать:

/\$(\d*\.?\d+?)/
...