2015-10-06 55 views
1

我想遍历几行文本,并执行以下操作:紧凑的方式来获得潜在的捕捉红宝石

caps = /something(.*)to capture/.match(line).captures 
do_something_with_caps(caps[0]) 

但我会得到Undefined method 'captures' for nil:NilClass每当我没有得到匹配。我可以将匹配分配给一个临时变量,然后在获取捕获之前测试nil,但对我来说这似乎相当冗长。有没有更紧凑的方法来做到这一点?

回答

0

.scan更换.match.captures作为一种替代方案:

caps = line.scan(/something(.*)to capture/).flatten 
do_something_with_caps(caps[0]) 

例子:

'somethingabcdto capture'.scan(/something(.*)to capture/).flatten #=> ["abcd"] 
'nothing to capture here'.scan(/something(.*)to capture/).flatten #=> [] 
0
caps = $~.captures if /something(.*)to capture/.match(line) 
+0

尽管此代码可以回答这个问题,提供有关为什么和/或如何验证码答案附加的上下文这个问题提高了它的长期价值。 – JAL