在ruby中的字符串中间添加0填充到数字

时间:2012-04-30 23:53:35

标签: ruby

这可能是一个非常简单的正则表达式,但它已经证明难以谷歌的那些问题之一。

我有来自第三方系统的错误代码。它们应该采用以下格式:

  

ZZZ ##

其中Z是Alpha,#是数字。他们应该是0填充,但我发现他们有时会回来

  

ZZZ#

没有0填充。

任何人都知道如何添加0填充,以便我可以使用字符串作为哈希的索引?

4 个答案:

答案 0 :(得分:3)

这是我的看法:

def pad str
  number = str.scan(/\d+/).first
  str[number] = "%02d" % number.to_i
  str
end

6.times do |n|
  puts pad "ZZZ#{7 + n}"
end

# >> ZZZ07
# >> ZZZ08
# >> ZZZ09
# >> ZZZ10
# >> ZZZ11
# >> ZZZ12

阅读:

答案 1 :(得分:2)

fixed = str.gsub /([a-z]{3})(\d)(?=\D|\z)/i, '\10\2'

那说:

  • 找三个字母
    • ......后跟一个数字
    • ...并确保您看到非数字或文件结尾
  • 并替换为三个字母(\1),零(0),然后是数字(\2

要填充到任意长度,您可以:

# Pad to six digits
fixed = str.gsub /([a-z]{3})(\d+)/i do
  "%s%06d" % [ $1, $2.to_i ]
end

答案 2 :(得分:0)

可能有一百万种方法可以做到这一点,但这是另一种看法。

  

str.gsub!(/ [0-9] + /,'0 \ 0')如果str.length< 5

答案 3 :(得分:0)

这是我的:

"ZZZ7".gsub(/\d+/){|x| "%02d" % x}
=> "ZZZ07"