捕获第一个十进制数字,在Regex Ruby中为> = 10

问题描述 投票:0回答:2

已经设法从给定的字符串中捕获第一个十进制数字

^\D*(\d+(?:\.\d+)?)

参见:https://rubular.com/r/5WJw7OkQ36iaQI

^从示例中,我需要捕获50,而不是2。

我只需要捕获不小于10的任何十进制数字-以避免捕获非价格值。

我只想记录客户给出的价格,而不是花费的小时数和他们给出的一些其他随机信息。

有办法吗?谢谢。

regex ruby
2个回答
0
投票

我喜欢做类似的事情,

/^(?<hours>\d+).+\$(?<price>\d+)/

我喜欢给组加上标签,因为它可以帮助我将来理解/维护正则表达式,但是显然你可以做到

^.+\$(?<price>\d+)

也将起作用

示例使用方法...

2.6.4 :041 > m="2 hrs for $50".match(/^(?<hours>\d+).+\$(?<price>\d+)/)
 => #<MatchData "2 hrs for $50" hours:"2" price:"50">
2.6.4 :042 > m["price"]
 => "50"
2.6.4 :043 > m["hours"]
 => "2"
2.6.4 :044 > m="2 hrs for $50".match(/^.+\$(?<price>\d+)/)
 => #<MatchData "2 hrs for $50" price:"50">
2.6.4 :045 > m["price"]
 => "50"

由于您具有$字符,因此不需要检查是否小于10才知道这是一个价格。


0
投票

您已经对其他方法有了很好的答案,但是可以直接回答您的问题:

我只需要捕获不小于10的任何十进制数字

[/[1-9][0-9]+/将捕获大于或等于10的第一个数字。在您的示例中,它返回50而不是2

© www.soinside.com 2019 - 2024. All rights reserved.