Bhushan Lodha
Bhushan Lodha

Reputation: 6862

How to write a regex to extract numeric values from a string?

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

Answers (4)

steenslag
steenslag

Reputation: 80105

No regex :

str.delete("^0-9.")

Upvotes: 6

Phrogz
Phrogz

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

Aliaksei Kliuchnikau
Aliaksei Kliuchnikau

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

dorsh
dorsh

Reputation: 24750

I don't know ruby, but the regex should be \d+(?:\.\d+)?. This will also work with "$9/hr"

Upvotes: 1

Related Questions