.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. Python
  5. Pythonでの正規表現検索の方法とは?str型文字列やマッチオブジェクト等について解説

Pythonでの正規表現検索の方法とは?str型文字列やマッチオブジェクト等について解説

  • Python
  • プログラミング言語
公開日時:   更新日時:
Pythonでの正規表現検索の方法とは?str型文字列やマッチオブジェクト等について解説
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    システム
    エンジニア
    やや複雑ですが、実務でよく使われるオブジェクトなんですね。

    プロジェクト
    マネージャー
    そうですね。Pythonではよく利用されます。目的のはっきりしたプログラムを書くことができますので、しっかりマスターしたいですね。

    Pythonと正規表現


    プログラミング言語Pythonではreモジュールを用いて正規表現検索・置換処理を利用できます。

    検索パターンおよび検索される文字列には、Unicode文字列(str型)や8ビット文字列(bytes型)が使えますがstr型とbytes型を混在させることはできません。同様に、置換時の置換文字列は検索パターンと検索文字列の両方と同じ型でなければなりません。

    なお、サードパーティのregexモジュールというものもありますが、ここでは標準ライブラリのreモジュールとWindowsのPython3.9.1(Python3)を用いて解説します。

    Pythonでの文字列型変数

    Pythonにおいて文字列型は2種類あります。ひとつはUnicode文字列を格納するstr型、もうひとつはASCII文字列(8ビット長文字列)を格納するbytes型です。

    str型は普通に文字列リテラルとして定義できますが、bytes型に全角文字(8ビットを超える文字)を含める場合にはエスケープシーケンスを用いて定義する必要があります。

    bytes型で全角文字の’あいう’という文字列を定義する場合、文字コードUTF-8で表現するとそれぞれ E38182、E38184、E38186 となりますので以下のようになります。

    Pythonで正規表現のパターンを記述するには

    Pythonで正規表現のパターンを記述する場合、raw文字列というものを使用すると便利です。通常の文字列リテラルのバックスラッシュ(¥)はエスケープシーケンスとして扱われるため「¥¥」のように2つ重ねる必要があります。そうすると文字列リテラルは見づらくなりますし、入力するのも面倒です。

    そのようなときに使われるのがraw文字列です。raw文字列リテラルを定義するときは、先頭に「r」を付けます。

    以下にWindowsのパスを定義する例を示します。

    文字コードの異なるパターンと文字列での検索

    Pythonで文字コードの異なるパターンを使って文字列検索する場合には、一旦Unicodeに変換してから検索を実行します。シフトJISコードとEUCコードの文字列リテラルの定義と文字コード変換の例を以下に示します。

    Pythonでの正規表現の使い方


    Pythonで正規表現検索する場合、検索パターンを前もってコンパイルしてから検索する方法と検索パターンをそのまま渡して検索する方法の2種類あります。

    複数回連続して同じパターンを検索する場合には前もってコンパイルして正規表現オブジェクトを作成しておけば、コンパイル処理を1回しか行わないで済むため処理速度的に有利です。逆に1回ずつしか検索しない場合には関数を利用してもよいでしょう。

    Pythonはインタプリタですので、プログラムをひとつひとつ入力・実行しながら動作確認していくことにします。

    Pythonで正規表現を使うための準備

    Pythonの正規表現はモジュールとして用意されていますので、使う前にreモジュールをインポートする必要があります。これは最初に1度だけ実行すればOKです。

    正規表現オブジェクトを作成して検索

    compile関数を使って正規表現オブジェクトを作成してからsearchメソッドで正規表現検索を実行し、マッチオブジェクト(後述)の結果を表示させてみることにしましょう。

    正規表現の関数を使って検索

    compile関数を使用しないで直接検索してみましょう。検索パターンも少し換えて「天気ですね」までマッチするようにしてみます。

    検索開始位置を指定して検索する

    今度は検索開始位置を指定して(終了位置も指定可能)検索させてみることにします。検索開始位置を指定するには正規表現オブジェクトのsearchメソッドを使います。「関数」の方は残念ながら対応していません。

    検索開始位置はsearchメソッドの第2引数で指定します。最初は開始位置0(先頭)から検索させてみます。続いてマッチオブジェクトのendメソッド(後述)を用いてマッチした文字列の次の位置から検索を開始してみます。

    グルーピング

    正規表現にはグルーピングという機能がありますが、グルーピングした正規表現にマッチした文字列はキャプチャされますので取得することができます。取得するにはマッチオブジェクト(後述)を参照します。

    マッチオブジェクト

    マッチオブジェクトはsearch(match)関数またはメソッドで得られた情報を持っています。得られた情報を参照するためのメソッドを紹介します。以下のMはマッチオブジェクトを表します。

    M.start(index)

    グルーピングに対応したマッチ文字列の開始位置を返します。indexはグループのインデックスで省略可能です。省略したり0を指定するとマッチ文字列全体の先頭位置を返します。

    M.end(index)

    グルーピングに対応したマッチ文字列の終了位置を返します。indexはグループのインデックスで省略可能です。省略したり0を指定するとマッチ文字列全体の終了位置を返します。

    M.group(index1[, …])

    グルーピングに対応したマッチ文字列のうち、指定したインデックスに対応した文字列を返します。index?は複数個、指定可能です。省略したり0を指定するとマッチ文字列全体を(1つの文字列として)返します。

    M.groups()

    グルーピングに対応したマッチ文字列すべてを返します。戻り値はタプル型になります。

    システム
    エンジニア
    文字列の検索や置き換えができるようになりますね。

    プロジェクト
    マネージャー
    マスターすれば、AI技術の基礎的な処理もできるようになるでしょう。

    最後に

    Pythonを使って正規表現検索するための説明をさせて頂きましたが如何でしたでしょうか。正規表現検索に使用できるフラグなども沢山あるので、気になった方は是非ご自身で調べてみて下さい。

    また正規表現による文字列置換も使えるようになりますと強力なツールとなり得ます。正規表現による文字列検索ができるようになれば、置換処理(sub関数)もできるようになりますので是非ご活用ください。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    新着案件New Job