已经设法从给定的字符串中捕获第一个十进制数字
^\D*(\d+(?:\.\d+)?)
参见:https://rubular.com/r/5WJw7OkQ36iaQI
^从示例中,我需要捕获50,而不是2。
我只需要捕获不小于10的任何十进制数字-以避免捕获非价格值。
我只想记录客户给出的价格,而不是花费的小时数和他们给出的一些其他随机信息。
有办法吗?谢谢。
我喜欢做类似的事情,
/^(?<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才知道这是一个价格。
您已经对其他方法有了很好的答案,但是可以直接回答您的问题:
我只需要捕获不小于10的任何十进制数字
[/[1-9][0-9]+/
将捕获大于或等于10的第一个数字。在您的示例中,它返回50
而不是2
。