ruby-on-rails - Ruby .split() 正则表达式

标签 ruby-on-rails ruby regex string split

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

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

但是我在正确设置正则表达式时遇到了麻烦。


ruby :

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

最佳答案

最好为此使用 String#scan:

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

关于ruby-on-rails - Ruby .split() 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15718668/

相关文章:

如果源中有 "+"字符,ruby 正则表达式不匹配字符串

javascript - 使用正则表达式识别以引号开头但返回子字符串的字符串

javascript - 真实世界 URL 的 URL 验证正则表达式

ruby-on-rails - 水平形式的复选框,位于标签的右侧

ruby-on-rails - Ruby on Rails 的 BBCode

ruby-on-rails - 在 ruby​​ 代码中将参数作为 param={} 传递

ruby - bundler :无法加载命令:faSTLane

javascript - 此正则表达式在 JavaScript 中引发错误 : <li id=\"[^\"]*+\"

ruby-on-rails - Rails - Postgres - 在类型转换之前提取属性

ruby-on-rails - Rails 加入排除某些 ID