「正規表現で『Pythonまたはパイソン』のように2種類以上のいずれかにマッチさせたい」
という疑問に答えるための記事です。

プログラミングの正規表現を使う場合、「似たような意味の言葉をマッチさせたい場合」や「日本語と英語両方マッチさせたい」という場合があると思います。
2パターン並べて別々にチェックする方法もありますが、出来るだけ1ステップで解決したいですよね。

正規表現で「〇〇または△△」でマッチさせたい場合は特殊記号の「|」(パイプ)を使用して、「〇〇|△△」のように記述します。
「〇〇|△△|□□」のように記述することも可能です。

本記事では特殊記号の「|」の使い方や記述例などについて説明します。

具体的には以下の2点です。

・正規表現で「〇〇または△△」をマッチさせるには?
・Pythonの正規表現で「〇〇または△△」」マッチの記述

正規表現をうまく活用して記述するコードを減らすようにしましょう。

正規表現で「〇〇または△△」をマッチさせるには?

正規表現で「〇〇または△△」のマッチに使用する特殊記号「|」(パイプ)について説明します。
具体的には以下の2点についての説明です。
・2つの言葉をマッチさせる例
・3つ以上の言葉をマッチさせる例

2つの言葉をマッチさせる例

「Python」と「パイソン」にマッチさせたい場合の記述例です。
以下の通り単純にパイプにつなぐだけ。

Python|パイソン

上記の記述をした場合「Python」と「パイソン」の両方にマッチします。

3つ以上の言葉をマッチさせる例

3つ以上の言葉をマッチさせる場合も基本的な考え方は同じでさらにパイプで繋ぐだけです。
「Python」と「パイソン」と「ぱいそん」の3つを比較した場合は以下のように記述します。

Python|パイソン|ぱいそん

上記の記述をした場合「Python」と「パイソン」と「ぱいそん」の全てにマッチします。

Pythonの正規表現で「〇〇または△△」」マッチの記述

パイプで繋ぎたい部分は()で括ります。
「.*」は「0文字以上の改行以外の文字列」を意味します。

◆実行結果
以下の通り「ぱいそん」だけマッチしない

「ぱいそん」もマッチさせたい場合はさらにパイプで繋ぎます。

◆実行結果
全ての文字列にマッチ。

どの文字でマッチしたか見たい場合はマッチ結果の配列をチェックします。
match[0]:比較した文字列全体を格納する
match[1]以降:()でグループ化した文字列を格納する

◆実行結果

上記例では、match[1]に格納されましたが、「re.compile(‘(.*)(Python|パイソン|ぱいそん)(.*)’)」のように前方に()で括られたグループがある場合はその数だけインデントがずれます。

◆実行結果

終わりに

正規表現で「〇〇または△△」でマッチさせたい場合は特殊記号の「|」(パイプ)を使用して、「〇〇|△△」のように記述するという話でした。
グループ化すればどの値でマッチしたかチェックすることができるのでマッチした値によって処理を変えるといったことも可能です。

正規表現はパッと見訳がわからないと感じる方も多いと思います。
私も理解するのにかなり苦労しました。

なかなか理解できないという人は実際にプログラムを作って試してみるのがおすすめです。
眺めているだけだと全然わからないけど動かしてみたらあっさり理解できたりします。

当サイトの「正規表現チェッカー」も使ってみてね。

以上、正規表現で「〇〇または△△」をマッチさせる方法でした。

正規表現まとめ>>Pythonと正規表現の基本