计数捕获组ruby

时间:2016-09-07 15:50:49

标签: ruby regex

我的ruby脚本中有一个带有几个捕获组的正则表达式。这是它的一小部分:/^cost:\s(\d)+\sitems:\s 而且我正在捕捉成本之后的数字。我后来有更多的捕获组,但我不知道有多少会被捕获。取决于输入文本文件。我知道访问捕获组的方法是:

$1, $2 etc etc

但我不知道有多少被捕获。有没有办法找出被捕获的群体数量并通过它进行迭代?

由于

2 个答案:

答案 0 :(得分:3)

有人可能会使用MatchData#captures

▶ mtch = /(\w)(\w)(\w)/.match 'hello'
#⇒ #<MatchData "hel" 1:"h" 2:"e" 3:"l">
▶ mtch.captures
#⇒ [
#  [0] "h",
#  [1] "e",
#  [2] "l"
# ]

另请注意,您实际上只捕获序列中的第一个数字。要捕获所有这些内容,请在括号内移动+

#           ⇓
/^cost:\s(\d+)\sitems:\s.../

答案 1 :(得分:0)

如果您认为使用正则表达式进行非确定性拆分,请考虑使用扫描方法:http://ruby-doc.org/core-2.2.0/String.html#method-i-scan