• 締切済み

Rubyの正規表現について

こんにちは!Rubyを勉強し始めたものです。 現在正規表現を勉強しており、以下のプログラム問題を解いています。 下記の「puts format_ssns~」部分がtrueになるようにメソッドを定義しなければならないのですが、どうしても「.」の「-」変換はなんとかなるのですが、同時に「234601422」にハイフンを挿入するのがうまくいきません…… 以下プログラムになります。 拙い質問で恐縮ですが、どうぞよろしくお願いいたします。 --- def format_ssns(string) #ここにプログラムを記入する形式 end puts "format_ssns finds and reformat any SSNs in the string" puts format_ssns("234601422, 350.80.0744, 013-60-8762") == "234-60-1422, 350-80-0744, 013-60-8762"

みんなの回答

回答No.2

数字が3桁、2桁、4桁で決まっていて、区切りが「-」で会ったり「.」で会ったり様々 各々要素は「,」で区切ってあって,前後にスペースがあったりなかったりする、という定義であれば 次の様なコードはいかがでしょう。 def format_ssns(string) # ,で区切ってある要素を分割 cols = string.split(/\s*,\s*/) # 分割要素それぞれを処理する cols = cols.map{ |s| s.gsub(/(\d{3}).?(\d{2}).?(\d{4})/, "\\1-\\2-\\3") } cols.join(", ") end

Malay666
質問者

お礼

お忙しい中回答ありがとうございました!参考にさせていただきました^^

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

def format_ssns(string) string.gsub(/\b(\d\d\d)\.?(\d\d)\.?(\d\d\d\d)\b/, "\\1-\\2-\\3") end でしょうか。数字3桁数字2桁数字4桁で間にピリオドがあっても無くてもいい。

Malay666
質問者

お礼

ありがとうございました!おかげさまで解決いたしました!!

関連するQ&A