我的ruby脚本中有一个带有几个捕获组的正则表达式。这是它的一小部分:/^cost:\s(\d)+\sitems:\s
而且我正在捕捉成本之后的数字。我后来有更多的捕获组,但我不知道有多少会被捕获。取决于输入文本文件。我知道访问捕获组的方法是:
$1, $2 etc etc
但我不知道有多少被捕获。有没有办法找出被捕获的群体数量并通过它进行迭代?
由于
答案 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