Open5

正規表現と日付

息子溺愛パパ息子溺愛パパ

スペース埋め(デフォルト)

sprintf("%4d", 5)
# => "   5"

書式の意味

  • 0 を付けなければデフォルトで スペースで埋める

  • %4d → 幅4桁で右寄せ、残りは空白

息子溺愛パパ息子溺愛パパ

任意の桁数に変更

3桁でゼロ埋め

sprintf("%03d", 7)
# => "007"

5桁でスペース埋め

sprintf("%5d", 42)
# => "   42"
息子溺愛パパ息子溺愛パパ

左寄せにする場合

sprintf("%-4d", 5)
# => "5   "
  • - を付けると左寄せになります。
息子溺愛パパ息子溺愛パパ

サンプルコード

date_str = "1999年1月5日"

converted_zero = date_str.gsub(/(\d{4})年(\d{1,2})月(\d{1,2})日/) do
  sprintf("%04d-%02d-%02d", $1.to_i, $2.to_i, $3.to_i)
end

converted_space = date_str.gsub(/(\d{4})年(\d{1,2})月(\d{1,2})日/) do
  sprintf("%4d-%2d-%2d", $1.to_i, $2.to_i, $3.to_i)
end

puts converted_zero   # => "1999-01-05"
puts converted_space  # => "1999- 1- 5"
息子溺愛パパ息子溺愛パパ

西暦は4桁ゼロ埋め・月日は2桁ゼロ埋めの混在ルールで処理するサンプル

🎯 サンプルコード(混在ルール)

date_str = "1999年1月5日"

converted = date_str.gsub(/(\d{1,4})年(\d{1,2})月(\d{1,2})日/) do
  year   = sprintf("%04d", $1.to_i) # 西暦4桁ゼロ埋め
  month  = sprintf("%02d", $2.to_i) # 月2桁ゼロ埋め
  day    = sprintf("%02d", $3.to_i) # 日2桁ゼロ埋め
  "#{year}-#{month}-#{day}"
end

puts converted
# => "1999-01-05"

解説

  1. 西暦(年)

    sprintf("%04d", $1.to_i)
    
    • 例: 199"0199"
    • 例: 2024"2024"
  2. 月と日

    sprintf("%02d", $2.to_i)
    
    • 例: 1"01"
    • 例: 11"11"
  3. 正規表現

    /(\d{1,4})年(\d{1,2})月(\d{1,2})日/
    
    • 年:1〜4桁(西暦は3桁以下の入力も考慮)
    • 月/日:1〜2桁対応

実行例

"5年7月9日"
# => "0005-07-09"

"2024年11月23日"
# => "2024-11-23"

応用:スペース埋めにしたい場合

もし月日をスペース埋めで揃えたいなら %2d を使います👇

month  = sprintf("%2d", $2.to_i) # => " 7"
day    = sprintf("%2d", $3.to_i) # => " 9"

出力:

"0005- 7- 9"

結論

  • 年:%04d で必ず4桁
  • 月・日:%02d で2桁ゼロ埋め
  • 必要に応じて %2d に変えればスペース埋めも可能