Ruby:在最后一个数字字符上拆分字符串

时间:2013-04-03 19:15:43

标签: ruby-on-rails ruby

我的Ruby模型中有以下方法:

旧:

def to_s
    numbers = self.title.scan(/\d+/) if self.title.scan(/\d+/)
    return numbers.join.insert(0, "#{self.title.chop} ") if numbers

    "#{self.title.titlecase}"
  end

新:

def to_s
    numbers = self.title.scan(/\d+/)
    return numbers.join.insert(0, "#{self.title.sub(/\d+/, '')} ") if numbers.any?

    self.title.titlecase
  end

title可以是这样的:Level1或TrackStar

所以TrackStar应该成为Track Star,而Level1应该是Level 1,这就是我开始扫描数字的原因

我试图将其显示为第1级。上述工作,我只是想知道是否有更有说服力的解决方案

2 个答案:

答案 0 :(得分:4)

试试这个:

def to_s
  self.title.split(/(?=[0-9])/, 2).join(" ")
end

split的第二个参数是确保“Level10”之类的标题不会转换为“Level 1 0”。

修改 - 在字词之间添加空格,我会使用gsub

def to_s
  self.title.gsub(/([a-z])([A-Z])/, '\1 \2').split(/(?=\d)/, 2).join(" ")
end

请确保在gsub的第二个参数中使用单引号。

答案 1 :(得分:1)

这个怎么样:

'Level1'.split(/(\d+)/).join(' ')
#=> "Level 1"