在Ruby中,我想将斜杠分隔的字符串(例如“foo / bar / baz”)转换为[“foo / bar / baz”,“foo / bar”,“foo”]。我已经有几行长的解决方案;我正在寻找一个优雅的单线。它还需要适用于任意数量的段(0和更高)。
答案 0 :(得分:12)
"foo/bar/baz".enum_for(:scan, %r{/|$}).map {Regexp.last_match.pre_match}
答案 1 :(得分:4)
最高投票的答案有效,但这是一个稍微短一点的方式,我认为对那些不熟悉那里使用的所有功能的人来说更具可读性:
a=[]; s.scan(/\/|$/){a << $`}
结果存储在a
:
> s = 'abc/def/ghi'
> a=[]; s.scan(/\/|$/){a << $`}
> a
["abc", "abc/def", "abc/def/ghi"]
如果订单很重要,您可以撤消数组或使用unshift
代替<<
。
感谢dkubb,感谢OP对这个答案的改进。
答案 2 :(得分:0)
不如选择的答案有效,并且在给定空字符串时给出[]
,而不是[""]
,但它是真正的一个字符串:P
s.split('/').inject([]) { |a,d| a.unshift( [a.first,d].compact.join('/') ) }
答案 3 :(得分:0)
->(l,s,z){
( t = s[/#{z}.[^\/]*/] ) && [l[l,s,t], t]
}.tap{ |l|
break l[l,'a/b/c','']
}.flatten.compact