文字列を自由に操れ! 正規表現の基礎

コード

データ分析する上で避けては通れない道、それが文字列操作です。膨大なデータの中から、自分の求めるデータを見つけ出し抽出する、それを可能にするのが「正規表現」です。ただ、少し癖があるため自在に使いこなすためには慣れが必要です。ただし、使いこなせるようになれば、スクレイピングでもファイル検索でもデータの改変でも自在に行えるようになります。そういった利点を考えると今勉強しておくのが良いのではないでしょうか。

また、今回はUNIXのgrepコマンドを使用して正規表現の実行を行います。正規表現で使用されるメタ文字には「基本正規表現」と「拡張正規表現」の2種類あり、「拡張正規表現」を使用するためにはgrep -E とオプションをつける必要があります。(オプションを指定しなくても、メタ文字の前に \ (バックスラッシュ)をつけることでgrepのみでの実行は可能です。)

基本正規表現(メタ文字)

. (任意の1文字に一致)

たとえば、「と.い」と検索した場合、「とかい」・「とけい」・「とりい」などが一致します。

[ ] (特定の1文字に一致)

たとえば、「と[かけ]い」と検索した場合、「とかい」・「とけい」が一致します。「とりい」は一致しません。アルファベットや数字の場合[a-zA-Z](アルファベット全体から1字)や[1-9](数字全体から1字)など連続する文字列の短縮表記が可能です。

[^ ] (特定文字以外の1文字に一致)

たとえば、「と[^かけ]い」と検索した場合、「とりい」が一致します。「とかい」・「とけい」は一致しません。[^a-zA-Z](アルファベット以外から1字)や[^1-9](数字以外から1字)。

^ (行頭に任意の文字がある文字列のみ一致)

たとえば、「^とか」と検索した場合、「とかい」・「とかち」が一致します。「なんとか」は一致しません。

$ (行末に任意の文字がある文字列のみ一致)

たとえば、「とか$」と検索した場合、「なんとか」が一致します。「とかい」・「とかち」は一致しません。

* (直前の正規表現が繰り返される文字列に一致)

たとえば、「すも*おいしい」と検索した場合、「すももおいしい」・「すももももももおいしい」が一致します。このメタ表現では「も」が0でも一致するので、「すおいしい」も一致します。「すもうおいしい」には一致しません。

拡張正規表現(メタ文字)

+ (直前の正規表現が繰り返される文字列に一致、ただし直前の正規表現の文字が0ではだめ)

たとえば、「すも+おいしい」と検索した場合、「すももおいしい」・「すもおいしい」が一致します。このメタ表現では「も」が0では一致しないので、「すおいしい」は一致しません。

? (直前の正規表現が0回または1回繰り返される文字列に一致)

たとえば、「いる?か」のと検索した場合、「いか」・「いるか」が一致します。「いるるか」は一致しません。

{i ,j} (i回以上j回以下の繰り返しに一致)

たとえば、「すも{1,2}おいしい」のと検索した場合、「すもおいしい」・「すももおいしい」が一致します。

{i } (i回の繰り返しに一致)

たとえば、「すも{2}おいしい」のと検索した場合、「すももおいしい」のみに一致します。

{i, } (i回以上の繰り返しに一致)

たとえば、「すも{5,}おいしい」のと検索した場合、「すももももももおいしい」・「すももももももももおいしい」などに一致します。

( ) (単語をグループ化)

たとえば、「(すも)*おいしい」のと検索した場合、「すもすもすもおいしい」などに一致します。

| (ORの論理演算子の使用)

たとえば、「(すもも|もも|いちご)おいしい」のと検索した場合、「すももおいしい」・「ももおいしい」・「いちごおいしい」のいずれかに一致します。

注意点

メタ文字を通常の文字列として扱いたい場合は、メタ文字の直前に \(バックスラッシュ)を置くことで、メタ文字の機能をキャンセルことができます。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする