- 締切済み
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"
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- m_matsubara
- ベストアンサー率48% (80/166)
数字が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
- notnot
- ベストアンサー率47% (4900/10358)
def format_ssns(string) string.gsub(/\b(\d\d\d)\.?(\d\d)\.?(\d\d\d\d)\b/, "\\1-\\2-\\3") end でしょうか。数字3桁数字2桁数字4桁で間にピリオドがあっても無くてもいい。
お礼
ありがとうございました!おかげさまで解決いたしました!!
お礼
お忙しい中回答ありがとうございました!参考にさせていただきました^^