1

これは本当に単純な正規表現かもしれませんが、Google で検索するのが難しいことが証明されている問題の 1 つです。

サードパーティのシステムからエラー コードが返ってきました。それらは次の形式になっているはずです。

ZZZ##

ここで、Z はアルファ、# は数値です。それらは 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'

それは言います:

  • 3文字を見つける
    • …数字が続く
    • …そして、数字以外またはファイルの終わりが表示されていることを確認してください
  • \13 文字 ( )、ゼロ ( 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')if str.length <5

于 2012-05-01T00:55:40.990 に答える