2015-10-06 58 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