从路径列表中的每个条目中删除下划线字符

时间:2009-08-14 14:33:37

标签: ruby regex

有一个字符串数组

    paths = ['foo/bar_baz/_sunny', bar/foo_baz/_warm', 'foo/baz/_cold', etc etc]

我需要删除路径最后部分的下划线(_sunny => sunny,_warm => warm,_cold => cold)

    paths.each do |path|
        path_parts = path.split('/')
        path_parts.last.sub!(/^_/, '')
        puts path_parts.join('/')
    end

然而,这个解决方案有点脏。我觉得可以在不使用path.split和path.join的情况下完成。你有什么想法吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

我不懂Ruby,但模式

/('[a-zA-Z0-9_\/]*\/)_([a-zA-Z0-9_]*')/g

可以替换为

'$1$2'

如果Ruby中使用$x来引用匹配组,g是有效标志。它需要对字符串应用一次,没有拆分或连接。

答案 1 :(得分:2)

或者,更紧凑:

paths.map {|p| p.sub(/_(?=[^\/]*$)/,"")}

也就是说,删除任何下划线,后跟任意数量的非斜杠,然后是字符串的结尾......