Help us understand the problem. What is going on with this article?

【Ruby】scanメソッドでフォーマットがバラバラの年月日情報を抜き出す

はじめに

Rubyでデフォルトで用意されているscanメソッドを使ってみたら便利だったのでまとめました。

参考にしたのはRuby公式リファレンスです。
instance method String#scan (Ruby 2.6.0)

この記事が役に立つ方

  • scanメソッドの使い方を知らない
  • Ruby初心者

この記事のメリット

  • scanメソッドで欲しい情報だけを抜き出した配列を作ることが出来るようになる

環境

  • macOS Catalina バージョン10.15.1
  • シェル:zsh
  • Ruby 2.6.3

scanメソッドとは?

公式リファレンスの説明

self に対して pattern を繰り返しマッチし、 マッチした部分文字列の配列を返します。
pattern が正規表現で括弧を含む場合は、 括弧で括られたパターンにマッチした部分文字列の配列の配列を返します。

基本構文

以下のようになります。

文字列.scan(探索するパターン)

探索するパターンには文字列正規表現が入ります。
では、次に具体的な使用例を確認しましょう。

具体的な使用例

【フォーマットが定まっていない年月日を配列にして取得したい】

例えば、以下のような年月日のデータがあるとします。
人によって表現がまちまちで、あげくの果てにはひらがな表記まであるとします。

前から何番目、、、とかでは抽出出来ません。

    2019/11/18
    2019-11-18
    2019.11.18
    2019年11月18日
    2019ねん11がつ18にち

ここから共通[年, 月, 日]の配列を取り出したい場合、以下のようにします。

年月日の文字列.scan(/\d+/)

/\d+/1文字以上の数字を表す正規表現です。
では、出力をみてみましょう。

【出力】

"2019.11.17".scan(/\d+/)
=> ["2019", "11", "17"]

"2019/11/17".scan(/\d+/)
=> ["2019", "11", "17"]

"2019-11-17".scan(/\d+/)
=> ["2019", "11", "17"]

"2019年11月17日".scan(/\d+/)
=> ["2019", "11", "17"]

"2019ねん11がつ17にち".scan(/\d+/)
=> ["2019", "11", "17"]

どれも同様の出力を得ることが出来ました。

間に入る文字がパターン外であれば無視されるので、文字数の決まっていないシーンで便利です。

あとはこの配列を用いて好きなフォーマットに整形しなおすことが可能になります。

おわりに

記述がシンプルで済むのもいいですね。

他にこういうシーンで真価を発揮する!ということをご存知の方がいらっしゃれば是非教えて頂きたいです:relaxed:

参考にさせて頂いたサイト(いつもありがとうございます)

instance method String#scan (Ruby 2.6.0)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away