这可能是一个非常简单的正则表达式,但它是已证明很难用谷歌搜索的问题之一。
我收到来自第三方系统的错误代码。它们应该采用以下格式:
ZZZ##
其中 Z 是 Alpha,# 是数字。他们应该是 0 填充,但我发现有时他们会回来
ZZZ#
没有 0 填充。
任何人都知道我如何添加 0 填充,以便我可以将字符串用作哈希的索引?
这可能是一个非常简单的正则表达式,但它是已证明很难用谷歌搜索的问题之一。
我收到来自第三方系统的错误代码。它们应该采用以下格式:
ZZZ##
其中 Z 是 Alpha,# 是数字。他们应该是 0 填充,但我发现有时他们会回来
ZZZ#
没有 0 填充。
任何人都知道我如何添加 0 填充,以便我可以将字符串用作哈希的索引?
这是我的看法:
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
阅读:
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
这是我的:
"ZZZ7".gsub(/\d+/){|x| "%02d" % x}
=> "ZZZ07"
可能有一百万种方法可以做到这一点,但这里有另一种看法。
str.gsub!(/[0-9]+/ , '0\0' ) 如果 str.length < 5