• 締切
  • 困ってます

Rubyの正規表現について

  • 質問No.9110257
  • 閲覧数357
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (2/2)

こんにちは!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件)

  • 回答No.2

ベストアンサー率 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
お礼コメント
Malay666

お礼率 100% (2/2)

お忙しい中回答ありがとうございました!参考にさせていただきました^^
投稿日時:2016/01/23 16:32
  • 回答No.1

ベストアンサー率 48% (4420/9121)

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

お礼率 100% (2/2)

ありがとうございました!おかげさまで解決いたしました!!
投稿日時:2016/01/23 16:33
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ