正規表現

グループ・選択

どっちでもいい!

 今回紹介する正規表現は、選択(OR)を表す | です。

これは、 A | B のように用いると、A か B にマッチします。

直感的に把握でき、イメージし易い正規表現です。

 また | は、通常の文字だけでなく、メタキャラクタ(Metacharacter)を用いて構成する事も可能です。

この事は、| と同様に選択(OR)を表現する事が出来る、 [ ](文字クラス) との違いになります。

復習になりますが、 [ ] 中のメタ文字は、いくつかの例外を除いて無効になるからです。

 この他の注意点として、| は、貪欲マッチにはならないという事です。

つまり、 A | AB において、 A がマッチすれば AB によって、より長い一致にはなりません。

(貪欲マッチについては、【*? +? ?? { , }? 繰り返し】の項目で詳述します。)

それでは、一つずつ実行して確認していきましょう。


この記事の難度は、入門〜基礎  Bクラスです。

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

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

難度       :
事前知識: Pythonの基礎文法(reモジュールを含む)。位置に関する正規表現等。
学習効果:  選択(OR) を習得し、[ ](文字クラス) との違いも理解出来る。

Contens  |   目次

Chapter1 Pythonで実行

Chapter1   Pythonで実行

通常の文字のみ

 まずは最もシンプルな使い方です。

| における選択対象を、通常の文字のみとします。

    re_meta14_1.py

        import  re

        pattern = re.compile("y|s")
        st ="yes"
        result = pattern.findall(st) 
        print(result)    
                            


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

 予想通り y と s にマッチしました。

貪欲マッチ

 さて、次は | が貪欲マッチにならない事を確認してみます。

これにつき、pythonの公式ドキュメントでは以下のように述べています。

"対象文字列を走査するとき、'|' で分離された正規表現は左から右へ順に試されます。一つのパターンが完全にマッチしたとき、そのパターン枝が受理されます。つまり、ひとたび A がマッチしてしまえば、例え B によって全体のマッチが長くなるとしても、 B はもはや走査されません。言いかえると、 '|' 演算子は決して貪欲にはなりません。"  (Python公式ドキュメントより引用)


という事なので、パターンを y|ye で構成した場合、 左側の y のみがマッチします。

    re_meta14_2.py

        import  re

        pattern = re.compile("y|ye")
        st ="yes"
        result = pattern.findall(st) 
        print(result)    
                            


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

  y のみがマッチして、 ye まで広がっていません。

メタキャラクタも含む

 ここまでは、通常の文字だけでパターンを作成しました。

| はそれに加えて、メタキャラクタも利用可能です。

位置( ^, $ )や、任意の1文字( . )を表す正規表現を使ってみましょう。

    re_meta14_3.py

        import  re

        pattern = re.compile("^.|.$")
        st ="yes"
        result = pattern.findall(st) 
        print(result)    
                            


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

 [ ](文字クラス) の場合と異なり、メタキャラクタでもマッチしました。



 | の解説は以上になります。

正規表現で 選択(OR) を表す事を習得しました

また、[ ](文字クラス) との違いも理解できました。

| は比較的操作し易いので、後に使う機会が多いかもしれません。

関連記事

基礎3

| OR(または)

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

( ) グループを指定

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

( ) キャプチャを使う

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

( ) 名前つきグループ

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

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

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

ハロー ! メタキャラクタ

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

正規表現とは?

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

PR