Pythonのモジュールreで正規表現操作を行う方法【初心者向け】
初心者向けにPythonのモジュールreで正規表現操作を行う方法について解説しています。正規表現を使うことで、表記ゆれへの対応や書式のチェックを行うことができます。ぜひ書き方を覚えておきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
Pythonのモジュールreで正規表現操作を行う方法について解説します。
そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。
なお本記事は、TechAcademyのオンラインブートキャンプPython講座の内容をもとに紹介しています。
今回は、Pythonに関する内容だね!
どういう内容でしょうか?
モジュールreで正規表現操作を行う方法について詳しく説明していくね!
お願いします!
モジュールreとは
モジュール re とは、 Python で正規表現を行うモジュールです。 Python の標準ライブラリに含まれています。正規表現とは、文字列の集合を「意味合いをもたせた記号を組み合わせて」表現する手法です。正規表現は以下のような用途で利用されます。
文字列の書式チェック
例えばメールアドレスでは使える文字に制限があり、アットマーク(@)が必須であるといった条件がありますが、その範囲内であれば任意の文字列を利用することができます。
このような場合「メールアドレスとして正しいか」という書式のチェックに正規表現を利用することができます。
表記のゆれに対応した文字列の抽出
例えば「りんご」と「リンゴ」、「林檎」は文字列としては異なりますが意味は同じです。このような表記のゆれに対応しながら文字列を抽出する際、正規表現を利用することができます。現在では、自然言語処理などの分野でも利用されています。
正規表現で使われる記号をメタ文字と呼び、以下のような種類があります。
メタ文字 | 意味 | 例 | マッチする文字列 |
. | 任意の1文字 | te.t | “test”, “teSt”, “tett” |
^ | 文字列の先頭 | ^te | “test”, “tesuto”, “te” |
$ | 文字列の末尾 | st$ | “test”, “first”, “st” |
* | 直前の文字の0回以上の繰り返し | te* | “te”, “teeeee”, “t” |
+ | 直前の文字の1回以上の繰り返し | te+ | “te”, “teeeee” |
上記はほんの1例です。その他のメタ文字や詳しい使い方は公式ドキュメントを参考にしてください。
https://docs.python.jp/3/library/re.html
モジュールreの関数で 正規表現操作を行う方法
reモジュールを使うには、モジュールをインポートします。
import re
文字列の先頭がパターンに一致するかを調べるには match メソッドを使用します。マッチした場合はその文字列を match オブジェクトとして返します。
re.match(パターン, 文字列)
先頭に限らずパターンに一致するかを調べるには search メソッドを使用します。マッチした場合は最初にマッチした文字列を match オブジェクトとして返します。
re.search(パターン, 文字列)
マッチする部分を全て確認するには findall メソッドを使用します。マッチした場合は文字列をリストとして返します。
re.findall(パターン, 文字列)
実際に書いてみよう
今回のサンプルプログラムでは、 re モジュールを使った正規表現の利用方法を確認します。実行は Python インタプリタで行います。はじめに re モジュールをインポートし、もととなる文字列を用意しましょう。
import re s = "りんごをひとつ、みかんをふたつ、パイナップルをみっつ食べました"
最初は match の使い方です。
m = re.match("(りんご|みかん|パイナップル)", s) print(m.group())
実行結果は以下のようになります。先頭に一致した「りんご」が返されました。
りんご
次に search の使い方です。
m = re.search("(ひとつ|ふたつ|みっつ)", s) print(m.group())
実行結果は以下のようになります。一番最初に一致した「ひとつ」が返されました。
ひとつ
最後は findeall です。
m = re.findall("(りんご|みかん|パイナップル)", s) print(m)
実行結果は以下のようになります。一致した文字列がリストで返されました。
['りんご', 'みかん', 'パイナップル']
この記事を監修してくれた方
太田和樹(おおたかずき) 普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。守備範囲はフロントエンド、モバイル、サーバサイド、データサイエンティストと幅広い。その幅広い知見を生かして、複数の領域を組み合わせた新しい提案をするのが得意。 開発実績:画像認識技術を活用した駐車場混雑状況把握(実証実験)、音声認識を活用したヘルプデスク支援システム、Pepperを遠隔操作するアプリの開発、大規模基幹系システムの開発・導入マネジメント 地方在住。仕事のほとんどをリモートオフィスで行う。通勤で消耗する代わりに趣味のDIYや家庭菜園、家族との時間を楽しんでいる。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でもPythonを使った人工知能(AI)や機械学習の基礎を習得できるオンラインブートキャンプPython講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。