正規表現で誤差を許容する文字列取得をしてみよう

Rubyに限らず使われる正規表現ですが

今回は似てるけどが少し違う文字列を取得する方法をご紹介致します。

 

ポイントは以下のとおりです。

  • [ ] を使って許容する文字の種類を指定できる
  • ?を使って前の正規表現がある場合、ない場合どちらも許容できる
  • .を使って文字列なんでも許容できる

 

上記を踏まえサンプルコードが以下です。


text = <<EOS
どの映画が好きですか?
1. ジュラシック・パーク
2. ジュラシック パーク
3. ジュラシック パーク
4. ジュラシックパーク
5. ジュラシックバーク
EOS

# 半角スペース 全角スペース ・ がある文字列を取得
p text.scan(/ジュラシック[  ・]パーク/)
# => ["ジュラシック・パーク", "ジュラシック パーク", "ジュラシック パーク"]

# 半角スペース 全角スペース ・ がある文字列を取得(スペースと・なしの場合も含む)
p text.scan(/ジュラシック[  ・]?パーク/)
# => ["ジュラシック・パーク", "ジュラシック パーク", "ジュラシック パーク", "ジュラシックパーク"]

# 間に1文字入る場合、入らない場合の文字列を取得
p text.scan(/ジュラシック.?パーク/)
# => ["ジュラシック・パーク", "ジュラシック パーク", "ジュラシック パーク", "ジュラシックパーク"]

# ジュラシックパークではなくジュラシックバークも取得する
p text.scan(/ジュラシック.?[パバ]ーク/)
# => ["ジュラシック・パーク", "ジュラシック パーク", "ジュラシック パーク", "ジュラシックパーク", "ジュラシックバーク"]

 

正規表現を使えば簡潔に処理が書けてスッキリしますね!

 

何か参考になれば幸いです(*^^*)