这可能是一个非常简单的正则表达式,但它已经证明难以谷歌的那些问题之一。
我有来自第三方系统的错误代码。它们应该采用以下格式:
ZZZ ##
其中Z是Alpha,#是数字。他们应该是0填充,但我发现他们有时会回来
ZZZ#
没有0填充。
任何人都知道如何添加0填充,以便我可以使用字符串作为哈希的索引?
答案 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"