2013-03-30 48 views
2

我試圖將字符串"[test| blah] [foo |bar][test|abc]"分爲以下幾陣:紅寶石.split()正則表達式

[ 
    ["test","blah"] 
    ["foo","bar"] 
    ["test","abc"] 
] 

但我有麻煩我的正則表達式正確。


紅寶石:

@test = '[test| blah] [foo |bar][test|abc]'.split(%r{\s*\]\s*\[\s*}) 
@test.each_with_index do |test, i| 
    @test[i] = test.split(%r{\s*\|\s*}) 
end 

我不能令人信服,這將返回:

[ 
    [ "[test" , "blah" ] 
    [ "foo" , "bar" ] 
    [ "test" , "abc]" ] 
] 

什麼是正確的正則表達式來實現這一目標?這將是巨大的,如果我也可以考慮新的生產線,說:"[test| blah] \n [foo |bar]\n[test|abc]"

回答

8

最好使用String#scan此:

> "[test| blah] \n [foo |bar]\n[test|abc]".scan(/\[(.*?)\s*\|\s*(.*?)\]/) 
=> [["test", "blah"], ["foo", "bar"], ["test", "abc"]] 
+0

完美!謝謝 –

1

這裏是另外一個例子:

'[test| blah] [foo |bar][test|abc]'.scan(/\w+/).each_slice(2).to_a 
#=> [["test", "blah"], ["foo", "bar"], ["test", "abc"]] 

"[test| blah] \n [foo |bar]\n[test|abc]".scan(/\w+/).each_slice(2).to_a 
#=> [["test", "blah"], ["foo", "bar"], ["test", "abc"]]