正規表現

グループ・選択 | _key-visual

パターンの一部を取得する

 さて、今回から3回にわたり ( ) について解説します。

( ) は、グループを表す正規表現です。

パターン文字列中に ( ) を組み込んだ場合、マッチした文字列全体の中で ( )の部分のみを取得する事が可能です。

 例えば、パターンを "telephone" とした場合を考えます。

"telephone" の中で "phone" の部分を ( ) で囲んでグループ化します。

すると、パターン文字列が "tele(phone)" のようになります。

このパターンがマッチした際には、telephone だけでなく phone のみを取り出す事も出来ます。

 他にも、前回紹介した | と併用する事で、OR(または)の範囲を区切るようにも使えます。

以下で、順を追って詳しくみていきます。


この記事の難度は、基礎  Cクラスです。

(A: やさしい   →   E: 難しい)

 事前知識として、pythonから正規表現を扱う方法が必要になります。
また、選択(OR)を表す正規表現や、文字クラスの知識があるとよいでしょう。

難度       :
事前知識: Pythonの基礎文法(reモジュールを含む)。正規表現の文字クラス等。
学習効果:  パターン中の一部分を取得する事が出来るようになる。

Contens  |   目次

Chapter1 Pythonで実行

Chapter1   Pythonで実行

単数マッチ

 では、上記したパターン文字列である "tele(phone)" を実行します。

文字列の取得には、マッチオブジェクトの group() を使います。

(group() については【パターンを探すメゾットを知る】のChapter2で詳しく説明しています。)

使用するPythonのバージョンは 3.7 です。

    re_meta15_1.py

        import  re

        pattern = re.compile("tele(phone)")
        st ="telephone"
        result = pattern.search(st)
        if  result: 
            print("group(0):",result.group(0))
            print("group(1):",result.group(1))    
                            


実行結果 グループ・選択 () _1

 phone のみでも取得できました。

今度は ( ) の数をもう少し増やしてみましょう。

    re_meta15_2.py

        import  re

        pattern = re.compile("令和(\d)年(\d)月(\d)日")
        st ="令和1年3月4日"
        result = pattern.search(st)
        if  result: 
            for  i   in  range(result.lastindex + 1):
                print('group{num};'.format(num = i),result.group(i))    
                            


実行結果 グループ・選択 () _2

 グルーピングした数字の部分を取り出せています。

複数回のマッチ

 ( ) でグループ化した箇所が、複数回マッチした場合をみていきます。

この際に利用するのは finditer() にします。

(finditer() については【パターンを探すメゾットを知る】のChapter3で詳しく説明しています。)

    re_meta15_3.py

        import  re

        pattern = re.compile("(\d)月")
        st ="1月 3月 4月 9月 新月 満月"
        result_iter = pattern.finditer(st)
        for  result   in  result_iter:
            print("group(0):",result.group(0))
            print("group(1):",result.group(1))
                            


実行結果 グループ・選択 () _3

 複数回のマッチでも、その分に対応する箇所を取得できました。

| との併用

 ( ) と | を組み合わせて使ってみます。

OR(または) に含める範囲を、 ( ) で区切る事が出来ます。

    re_meta15_4.py

        import  re
        #  |   (選択)を用いる。 tele か cell のどちらか。
        pattern = re.compile("(tele|cell)phone")
        st ="telephone cellphone headphone"
        result_iter = pattern.finditer(st)
        for  result   in  result_iter:
            print("group(0):",result.group(0))
            print("group(1):",result.group(1))
                            


実行結果 グループ・選択 () _4

 | により phone の前が、 telecell である場合にマッチしています。

複数個のグループで複数回のマッチ

 最後に少し複雑ですが、パターンが複数のグループで構成され、それが複数回マッチする場合を実行します。

    re_meta15_5.py

        import  re

        pattern = re.compile("(令和|平成)(\d)年(\d)月")
        st ="令和2年3月 平成7年1月 昭和5年2月"
        result_iter = pattern.finditer(st)
        for  result   in  result_iter:
            for  i   in  range(result.lastindex + 1):
                print('group{num};'.format(num = i),result.group(i))
                            


実行結果 グループ・選択 () _5

 各々のマッチ毎に、グループ化された文字列が取り出されました。



 グループ化について、一回目の解説はここまでです。

パターン中の一部分を取得する事が出来るようになりました。

二回目である次回は、キャプチャについてです。

関連記事

基礎3 | グループ・選択_key-visual

| OR(または)

正規表現: グループ・選択
難度       : 入門〜基礎
事前知識: Pythonの基礎文法(reモジュールを含む)。
学習効果: 選択(OR) を習得し、[ ](文字クラス) との違いも理解出来る。
基礎3 ( ) グループ・選択_key-visual

( ) グループを指定

正規表現: グループ・選択
難度       : 基礎
事前知識: Pythonの基礎文法(reモジュールを含む)
学習効果: パターン中の一部分を取得する事が出来るようになる。
基礎3 ( )キャプチャ グループ・選択_key-visual

( ) キャプチャを使う

正規表現: グループ・選択
難度       : 基礎
事前知識: Pythonの基礎文法(reモジュールを含む)。正規表現の文字クラスや置換処理等。
学習効果: 後方参照が出来るようになる。
基礎3 ( )名前つきグループ グループ・選択_key-visual

( ) 名前つきグループ

正規表現: グループ・選択
難度       : 基礎
事前知識: Pythonの基礎(reモジュールを含む)、置換処理等
学習効果: 名前つきグループの全般の処理。特に、後方参照を任意の名前で出来るようになる。
Pythonで正規表現を使う1

正規表現をPythonから使うには ?

正規表現: Pythonから使う
難度       : 入門
事前知識: Pythonの基礎文法
学習効果: pythonから正規表現を使う一連の流れを掴む
メタキャラクタに馴染む_key-visual

ハロー ! メタキャラクタ

正規表現: メタキャラクタの概要
難度       : 入門
事前知識: 不要
学習効果: メタキャラクタの概要を掴む
正規表現の概要_key-visual

正規表現とは?

正規表現: 概要
難度       : 入門
事前知識: 不要
学習効果: 正規表現の概要を知る
正規表現の概要

PR