Ruby中匹配组的数量?

时间:2017-11-04 00:39:59

标签: ruby regex regex-group

如果我有一堆正则表达式(使用括号),其中一些是可选的(使用问号),我如何找到正则表达式匹配的组数?我知道Python有一个名为groups()的函数会告诉你,但是你如何在Ruby中做到这一点?

m = /\d{2}(:\d{2}(:\d{2})?)?/.match('10') # I want to return 1
m = /\d{2}(:\d{2}(:\d{2})?)?/.match('10:30') # I want to return 2
m = /\d{2}(:\d{2}(:\d{2})?)?/.match('10:30:20') # I want to return 3

2 个答案:

答案 0 :(得分:2)

MatchData有#size#length方法,但它们也会计算空组,并且在所有三种情况下返回结果3

所以似乎唯一的解决方案就像下面的

/\d{2}(:\d{2}(:\d{2})?)?/.match('10').to_a.compact.count

答案 1 :(得分:1)

你可以这样使用finally

Array#compact