麻布十番で働くデータ分析者のブログ

グロースハック、プログラミング、データ分析の色々を発信します

正規表現に入門してみる

f:id:nimi0370376:20171213000155p:plain

プロを目指す人のためのRuby入門の続きをやっていきます。 今回は正規表現です。正直今まで正規表現はやったことがなかったので、本当に入門からやっていきます。

基本的な正規表現

そもそも正規表現ってなんだっていうところなんですけど、本から拝借すると下記のようになります。

パターンを指定して、文字列を効率よく検索 / 置換するためのミニ言語

どうやら、Rubyだけでなく他の言語でも使えるそうです。 基本的な正規表現は下記の記事から学べます。

qiita.com

qiita.com

数字や文字を表す

数字や文字を表す正規表現でよく使われるのは、下記になりそうです。

\d
#=> 数字

.
#=> 任意の一文字

\w
#=> [a-z0-9_]と同意

空間やスペースを表す

以下の正規表現が表現に拡張性を持たせます。

[ ]
#=> いずれか1文字を表す文字クラスを作る

[^ ]
#=> ~以外の任意の1文字を表す文字クラスを作る

?
#=> 直前の文字やパターンが1回、もしくは0回現れる

*
#=> 直前の文字のパターンが0回以上連続する

マッチングや置き換え

Rubyのプログラムでよく使われるマッチングを行い、置き換えるには主に下記の二つを利用します。

( )
#=> 条件該当場所をマッチ

gsub
#=> gsub(a,b)でaをbに置き換える

Ruby正規表現

Ruby正規表現は下記のようになります。

/正規表現/

正規表現Regexpクラスになります。

また記号の=~を利用することで左右のtrueとfalseを確かめることができます。 また、matchメソッドで特定のマッチした場所を利用できます。

text = '私の誕生日は1997年1月17日です。'
m = /(\d+)(\d+)(\d+)/.match(text)

m[1] #=> 1997

また、scanメソッドはマッチした場所を配列に入れて返してくれます。

'123 456 789'.scan(/\d+/)

#=> ["123","456","789"]

少し慣れが必要そうな正規表現ですが、文字置換などあらゆる作業を効率化できそうです。