正規表現基礎
| OR(または)
カテゴリー:グループ・選択
どっちでもいい!
今回紹介する正規表現は、選択(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)
実行結果
予想通り 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)
実行結果
y のみがマッチして、 ye まで広がっていません。
メタキャラクタも含む
ここまでは、通常の文字だけでパターンを作成しました。
| はそれに加えて、メタキャラクタも利用可能です。
位置( ^, $ )や、任意の1文字( . )を表す正規表現を使ってみましょう。
re_meta14_3.py import re pattern = re.compile("^.|.$") st ="yes" result = pattern.findall(st) print(result)
実行結果
[ ](文字クラス) の場合と異なり、メタキャラクタでもマッチしました。
| の解説は以上になります。
正規表現で 選択(OR) を表す事を習得しました。
また、[ ](文字クラス) との違いも理解できました。
| は比較的操作し易いので、後に使う機会が多いかもしれません。
関連記事
| OR(または)
正規表現: | グループ・選択 |
難度 : | 入門〜基礎 |
事前知識: | Pythonの基礎文法(reモジュールを含む)。 |
学習効果: | 選択(OR) を習得し、[ ](文字クラス) との違いも理解出来る。 |
( ) グループを指定
正規表現: | グループ・選択 |
難度 : | 基礎 |
事前知識: | Pythonの基礎文法(reモジュールを含む) |
学習効果: | パターン中の一部分を取得する事が出来るようになる。 |
( ) キャプチャを使う
正規表現: | グループ・選択 |
難度 : | 基礎 |
事前知識: | Pythonの基礎文法(reモジュールを含む)。正規表現の文字クラスや置換処理等。 |
学習効果: | 後方参照が出来るようになる。 |
( ) 名前つきグループ
正規表現: | グループ・選択 |
難度 : | 基礎 |
事前知識: | Pythonの基礎(reモジュールを含む)、置換処理等 |
学習効果: | 名前つきグループの全般の処理。特に、後方参照を任意の名前で出来るようになる。 |
正規表現をPythonから使うには ?
正規表現: | Pythonから使う |
難度 : | 入門 |
事前知識: | Pythonの基礎文法 |
学習効果: | pythonから正規表現を使う一連の流れを掴む |
ハロー ! メタキャラクタ
正規表現: | メタキャラクタの概要 |
難度 : | 入門 |
事前知識: | 不要 |
学習効果: | メタキャラクタの概要を掴む |
正規表現とは?
正規表現: | 概要 |
難度 : | 入門 |
事前知識: | 不要 |
学習効果: | 正規表現の概要を知る |
PR