Ruby 字符串替换可否只提前几次出现?

loveky · 2013年07月13日 · 最后由 Ddl1st 回复于 2013年07月13日 · 3118 次阅读

举例有一个时间字符串2012:02:02 09:09:09,其中你年月日部分应该使用-连接,而不是:

有没有方法可以只替换前两次出现的:-

PS: 现在想到的就是把字符串拆成 2 部分,替换完在接起来,有没有更简单的方法呢?

irb(main):003:0> t = "2012:02:02 09:09:09"
=> "2012:02:02 09:09:09"
irb(main):004:0> 2.times do
irb(main):005:1* t = t.sub(':', '-')
irb(main):006:1> end
=> 2
irb(main):007:0> t
=> "2012-02-02 09:09:09"
irb(main):008:0> 

#1 楼 @kingwkb 好的,次数比较少的话就先t.sub(':', '-').sub(':', '-')

t.gsub(/^(\d+):(\d+):(\d+)/, '\1-\2-\3')

另一种思路是取空格前面部分进行替换:

t.gsub(/(.*) /) { |ymd| ymd.gsub(':', '-') }
t[/(\d|:)+\b/] = $&.gsub(':','-')
需要 登录 后方可回复, 如果你还没有账号请 注册新账号