在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)
得票最高的答案是有效的,但这里有一个稍微简短的方法,我认为对于那些不熟悉那里使用的所有功能的人来说更具可读性:
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 对此答案的改进。