如果我有一堆正则表达式(使用括号),其中一些是可选的(使用问号),我如何找到正则表达式匹配的组数?我知道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
答案 0 :(得分:2)
MatchData有#size
和#length
方法,但它们也会计算空组,并且在所有三种情况下返回结果3
。
所以似乎唯一的解决方案就像下面的
/\d{2}(:\d{2}(:\d{2})?)?/.match('10').to_a.compact.count
答案 1 :(得分:1)
你可以这样使用finally
:
Array#compact