如何编写正则表达式从字符串中提取数值?

时间:2012-01-24 16:54:50

标签: ruby regex

我有一个字符串str = "$ 9.0 / hr"str = "$9.0/hr"。在这种情况下,我只想要这个整数值9.0

语言是Ruby 1.9.2

4 个答案:

答案 0 :(得分:7)

我会用:

number = str[ /\d*(?:\.\d+)?/ ]

或者,如果小于1.0的值需要前导0,

number = str[ /\d+(?:\.\d+)?/ ]

如果您在字符串中可能有其他数字,并且只希望(第一个)在其前面有一个美元符号的数字:

number = str[ /\$\s*(\d+(?:\.\d+)?)/, 1 ]

如果保证之后必须有(必须)小数位和数字:

number = str[ /\$\s*(\d+\.\d+)/, 1 ]

希望您可以混合搭配其中一些解决方案,以获得所需。

答案 1 :(得分:6)

没有正则表达式:

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

答案 2 :(得分:4)

如果您的价格始终为dollars.cents格式(可能是价格),请使用此正则表达式:

"$ 9.0 / hr".match(/\d+\.\d+/)[0] # => 9.0
"$9.0/hr".match(/\d+\.\d+/)[0] # => 9.0

否则你应该从Phrogz的答案中接受正则表达式。

答案 3 :(得分:1)

我不知道红宝石,但正则表达式应该是\d+(?:\.\d+)?。这也适用于"$9/hr"