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

时间:2010-02-13 09:09:22

标签: ruby regex

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

4 个答案:

答案 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