Reputation: 6862
I have a string str = "$ 9.0 / hr"
or str = "$9.0/hr"
. I only want the integer value from this in this case 9.0
Language is Ruby 1.9.2
Upvotes: 4
Views: 6664
Reputation: 303520
I'd use:
number = str[ /\d*(?:\.\d+)?/ ]
Or, if a leading 0 is required for values less than 1.0,
number = str[ /\d+(?:\.\d+)?/ ]
If you might have other numbers in the string, and only want the (first) one that has a dollar sign before it:
number = str[ /\$\s*(\d+(?:\.\d+)?)/, 1 ]
If it's guaranteed that there will (must) be a decimal place and digit(s) thereafter:
number = str[ /\$\s*(\d+\.\d+)/, 1 ]
Hopefully you can mix and match some of these solutions to get what you need.
Upvotes: 7
Reputation: 13739
If your prices always have dollars.cents
format (which is likely for prices) then use this regex:
"$ 9.0 / hr".match(/\d+\.\d+/)[0] # => 9.0
"$9.0/hr".match(/\d+\.\d+/)[0] # => 9.0
Else you should take regex from Phrogz answer.
Upvotes: 4
Reputation: 24750
I don't know ruby, but the regex should be \d+(?:\.\d+)?
. This will also work with "$9/hr"
Upvotes: 1