Regex 捕获第一个十进制数,>;=10英寸正则表达式Ruby

Regex 捕获第一个十进制数,>;=10英寸正则表达式Ruby,regex,ruby,Regex,Ruby,已设法从给定字符串捕获第一个十进制数 ^\D*(\D+(?:\。\D+) 见: ^从这个例子中,我需要捕捉50个,而不是2个 我只需要捕获任何不小于10的十进制数,以避免捕获非价格值 我只想捕捉客户给出的价格,而不是他们花费的时间和其他一些随机的东西 有办法吗?谢谢。我喜欢做这样的事情 /^(?<hours>\d+).+\$(?<price>\d+)/ /^(?\d+。+\$(?\d+)/ 我喜欢标记组,因为这有助于我将来理解/维护regexp,但显然您可以这样做 ^

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

^\D*(\D+(?:\。\D+)

见:

^从这个例子中,我需要捕捉50个,而不是2个

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

我只想捕捉客户给出的价格,而不是他们花费的时间和其他一些随机的东西


有办法吗?谢谢。

我喜欢做这样的事情

/^(?<hours>\d+).+\$(?<price>\d+)/
/^(?\d+。+\$(?\d+)/
我喜欢标记组,因为这有助于我将来理解/维护regexp,但显然您可以这样做

^.+\$(?<price>\d+)
^.+\$(?\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"
2.6.4:041>m=“2小时换50美元”。匹配(/^(?\d+)。+\$(?\d+)/)
=> #
2.6.4:042>m[“价格”]
=> "50"
2.6.4:043>m[“小时”]
=> "2"
2.6.4:044>m=“2小时换50美元”。匹配(/^.+\$(?\d+/)
=> #
2.6.4:045>m[“价格”]
=> "50"

因为你有$character,你不需要检查是否少于10就知道这是一个价格。

你已经得到了关于其他方法的好答案,但要直接回答你的问题:

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


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

,那么只需
/[0-9]{2,}/
?也许你可以给出更多的例子,建议一个解决方案会更容易一个例子是-不想抓住2,但50。如果这是我从回复中获取价格值的唯一方法。我无法仅通过附近的
$
捕获,因为其他客户机没有在句子上放置
$
:-)已经看过该示例。您是否尝试了我在第一条评论中提到的正则表达式?您正在使用一个示例来解释您想要做什么。这很少会导致一个精确、明确的问题,你的问题也不例外。例如,以下字符串中所需的返回值是什么?:
'2.50 35'
'007 19'
'5 7'
或。。。。?明白了吗?你可以用例子来说明你想要什么,但你必须先陈述一般问题,而不参考例子。@CarySwoveland:你说得对。可能是OP用错了“十进制数”这个词,他想说“自然数”之类的话。他说,他希望捕获货币,而且用户名听起来像日语,因此,使用日语,确实不需要小数部分。但目前还不清楚他想如何区分代表货币的数字和代表工作时间的数字,因为人们很可能每天工作超过10小时(特别是在日本);-)如果字符串是
“2小时5美元”
,那么我们需要更多的例子,因为这不是他说的,你可以做像/[1-9][0-9]+/,但是。。。如果。。。“20小时$4美元”?更多的例子可能会有帮助,但它们并不能代替问题的明确陈述,而这个问题还没有提供。如果字符串是
'2.50'
?很公平——如果需要十进制支持,我会将其改为:`/[1-9][0-9]+(\.[0-9]+)?/我并不是说字符串可能是
'2.50'
。我不知道。鉴于给出的唯一示例,我也不知道OP是否真的意味着“十进制数”。当问题不清楚时,如本问题,必须要求OP澄清。这不仅对读者提供有用的答案是必要的,而且要求最低限度的严谨也是对提问者的良好培训;如果他们不能提出明确的问题,他们将无法在工作空间中有效地工作。(回想一下,您需要在注释中包含用户名,以便SO将注释通知目标收件人。)