通过正则表达式从字符串中获取数字

时间:2015-06-17 09:09:23

标签: ruby regex

我有一个这样的字符串:

"com.abcd.efghi.pay.0.99"
"com.abcd.efghi.pay.9.99"
"com.abcd.efghi.pay.19.99"

我想得到这个数字(0.99,9.99,99.99)。我试着这样做:

"com.abcd.efghi.pay.0.99".scan(/\d/).join
=> "099"

任何人都可以帮助我获得正确的结果。提前谢谢!

8 个答案:

答案 0 :(得分:2)

"com.abcd.efghi.pay.0.99".split(/\D+/, 2).last # => "0.99"
"com.abcd.efghi.pay.9.99".split(/\D+/, 2).last # => "9.99"
"com.abcd.efghi.pay.19.99".split(/\D+/, 2).last # => "19.99"

"com.abcd.efghi.pay.0.99".sub(/\D+/, "") # => "0.99"
"com.abcd.efghi.pay.9.99".sub(/\D+/, "") # => "9.99"
"com.abcd.efghi.pay.19.99".sub(/\D+/, "") # => "19.99"

答案 1 :(得分:1)

你可能想要这样的东西:

\d+(\.\d+)?

查找整数,后跟可选的小数部分。

答案 2 :(得分:1)

这样的事情:

"com.abcd.efghi.pay.0.99".scan(/(\d+[.]\d+)/).flatten.first
# => "0.99"

答案 3 :(得分:1)

这非常简单,regexp适用于0.0000.00等数字:

\d{1,2}.{2,}
  • \d任意数字
  • \d{1,2}数字1到2之间
  • .
  • \d{2,} 2个或更多数字

示例:

>> "com.abcd.efghi.pay.19.99"[/\d{1,2}.{2,}/, 0]
=> "19.99"
>> "com.abcd.efghi.pay.9.99"[/\d{1,2}.{2,}/, 0]
=> "9.99"

答案 4 :(得分:1)

没有正则表达式:

str = "com.abcd.efghi.pay.0.99"

str.split(".").last(2).join(".") # => "0.99"

答案 5 :(得分:0)

您可以在scan中使用此正则表达式:

\b\d+(?:\.\d+)?

答案 6 :(得分:0)

您需要使用行结束锚。

\b\d+(?:\.\d+)?$

答案 7 :(得分:0)

啊,这么多方法。这里有几个:

str = "com.abcd.efghi.pay.9.99"

str[str.index(/\d/)..-1] #=> "9.99"
str.sub(/.*?(?=\d)/,'')  #=> "9.99"