2017-02-21 23 views
0

Я искал SO, чтобы узнать, как добиться того, чего я хочу. Я видел ответы, но ни один, что я хочу:Извлечение Float Value или целое значение из строки

str = "hello £25,500.98 and $5656.99" 
str.match(/\d+\.\d+/)[0] # => "500.98". Close but not what I want. 

str.scan(/\d/).join('') # Seems to combine all numbers - no. 

Я ожидаю получить25500.98. Все, что осталось после последней цифры, будет отброшено (надеюсь, что я здесь чувствую). Я мусор в регулярном выражении. Я думаю, что я пробовал много вариаций в консоли рельсы, но ничего не выходит вблизи кроме str.match(/\d+\.\d+/)[0]

+2

Во-первых, хорошее место для отладки ruby ​​regex's - http://www.rubular.com/ – nPn

+0

@nPn Никогда не знал об этом сайте. Спасибо – Sylar

ответ

1

Просто удалите запятые перед сопоставлением:

str.delete(',').match(/\d+\.\d+/)[0] 
+0

удалять ',' умный :) –

+0

В чем разница между 'scan' и' match'? Один быстрее? – Sylar

+1

@Sylar, 'scan' возвращает массив строк со всеми совпадениями. 'match' возвращает объект соответствия с первым совпадением. – ndn

0

Попробуйте регулярное выражение:

[£$](\d+,\d+\.\d+|\d+\.\d+|\d+) 

str.scan(/[£$]\d+,\d+\.\d+|\d+\.\d+|\d+/).each{|item| item.gsub!(/[£$,]/, '')} 

Example