有一个字符串数组
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的情况下完成。你有什么想法吗?
提前致谢
答案 0 :(得分:2)
我不懂Ruby,但模式
/('[a-zA-Z0-9_\/]*\/)_([a-zA-Z0-9_]*')/g
可以替换为
'$1$2'
如果Ruby中使用$x
来引用匹配组,g
是有效标志。它需要对字符串应用一次,没有拆分或连接。
答案 1 :(得分:2)
或者,更紧凑:
paths.map {|p| p.sub(/_(?=[^\/]*$)/,"")}
也就是说,删除任何下划线,后跟任意数量的非斜杠,然后是字符串的结尾......