1

这可能是一个非常简单的正则表达式,但它是已证明很难用谷歌搜索的问题之一。

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

ZZZ##

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

ZZZ#

没有 0 填充。

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

4

4 回答 4

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

阅读:

于 2012-05-01T00:00:38.533 回答
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
于 2012-05-01T00:04:36.467 回答
1

这是我的:

"ZZZ7".gsub(/\d+/){|x| "%02d" % x}
=> "ZZZ07"
于 2012-05-01T01:29:03.367 回答
0

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

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

于 2012-05-01T00:55:40.990 回答