将"a/b/c"转换为["a/b/c","a/b","a"的最简单方法]

Yeh*_*atz 7 ruby regex

在Ruby中,我想将斜杠分隔的字符串(例如"foo/bar/baz")转换为["foo/bar/baz","foo/bar","foo"].我已经有几行长的解决方案; 我正在寻找一个优雅的单线.它还需要适用于任意数量的段(0和更高).

sep*_*p2k 12

"foo/bar/baz".enum_for(:scan, %r{/|$}).map {Regexp.last_match.pre_match}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 4

得票最高的答案是有效的,但这里有一个稍微简短的方法,我认为对于那些不熟悉那里使用的所有功能的人来说更具可读性:

a=[]; s.scan(/\/|$/){a << $`}
Run Code Online (Sandbox Code Playgroud)

结果存储在a

> s = 'abc/def/ghi'
> a=[]; s.scan(/\/|$/){a << $`}
> a
["abc", "abc/def", "abc/def/ghi"]
Run Code Online (Sandbox Code Playgroud)

如果顺序很重要,您可以反转数组或使用unshift代替<<

感谢 dkubb 以及 OP 对此答案的改进。

  • @nas:返回值将是任何版本的 ruby​​ 中的字符串。请求的数组将位于“a”变量中。如果您意识到这一点并且只是挑剔,请随意忽略我的评论。 (2认同)
  • 您可以通过执行以下操作进一步简化块中的代码:a=[]; 'abc/def/ghi'.scan(/\/|$/){a&lt;&lt;$`} (2认同)