ruby正则表达式在最后一次出现的角色上分裂

时间:2009-10-22 03:05:32

标签: ruby regex

我对这一点感到有点难过,而且我还没有1.8,所以我没有前瞻。

我有一堆看起来像的字符串:

"a/b/c/d/e/f 1/2/3"

我想转变成:

"a/b/c/d/e" "f" "1/2" "3"

所以基本上我希望它在空格开头之前用最后一个斜线分割。我觉得我可以正常地做到这一点,但分裂总是似乎做了奇怪的事情。

2 个答案:

答案 0 :(得分:6)

1.8缺少背后的,而不是提前!所有你需要的是:

str.split(/\/(?=[^\/]+(?: |$))| /)

这种分割模式匹配a)任何斜杠,后面是非斜杠字符,直到下一个空格或字符串的结尾,以及b)任何空格。

答案 1 :(得分:1)

def foo s
   return [$1,$2] if s =~ /(.+)\/(\S)/
end

str = "a/b/c/d/e/f 1/2/3"
a = str.split /\s+/
a.collect { |e| foo e }.flatten

=> ["/a/b/c/d/e", "f", "1/2", "3"]

我打破了分裂并收集。当然,你可以根据需要缩短它。