Ruby .split()正则表达式

时间:2013-03-30 12:45:53

标签: ruby-on-rails ruby regex string split

我正在尝试将字符串"[test| blah] [foo |bar][test|abc]"拆分为以下数组:

[
    ["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]"

2 个答案:

答案 0 :(得分:8)

最好使用String#scan

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

答案 1 :(得分: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"]]