2

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

4

2 に答える 2

8

これに使用する方が良いString#scan

> "[test| blah] \n [foo |bar]\n[test|abc]".scan(/\[(.*?)\s*\|\s*(.*?)\]/)
=> [["test", "blah"], ["foo", "bar"], ["test", "abc"]]
于 2013-03-30T12:49:59.997 に答える
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"]]
于 2013-03-30T12:54:55.173 に答える