複数の文字列のいずれかにマッチするパターンを記述する

正規表現では文字列の選択肢をいくつか記述しておき、その中のいずれかに一致した場合にマッチするパターンを定義することができます。ここでは Python の正規表現で複数の文字列のいずれかにマッチするパターンを記述する方法について解説します。

(Last modified: )

複数の文字列のいずれかにマッチ(|)

メタ文字のひとつである縦棒(|)は複数の文字列のいずれか一つに一致する文字列にマッチします。文字列の候補を縦棒(|)で区切って記述します。

文字列|文字列|...

例えば次のようなパターンは Sunday か Sun か sunday に一致する文字列にマッチします。

r'Sunday|Sun|sunday'

Sunday か Sun か sunday にマッチします。前後に他のパターンがないので、これらのいずれかの文字列が含まれる文字列にもマッチします。

〇 Go out on sunday
〇 Today is SundaySunflowers are in bloom
サンプルコード

簡単なサンプルで試してみます。

import re

pattern = re.compile(r'Sunday|Sun|sunday')

print(bool(pattern.search('Today is Sunday')))
>> True
print(bool(pattern.search('Sunflowers are in bloom')))
>> True
print(bool(pattern.search('SUNDAY MORNING')))
>> False

複数の選択肢を括弧で囲んでグループ化する

複数の文字列の選択肢のいずれかにマッチするパターンを記述する場合、前後に別のパターンと組み合わせる場合、そのまま記述することができません。例えば Red か red かの選択肢で前後を単語の境界である \b を付けようとした場合、次のように書いてしまうと \bRed か re\b かの選択となってしまいます。

r'\bRed|red\b'

そこで選択肢の部分を括弧()で囲んでグループ化します。グループ化することでどこからどこまでが選択肢の部分なのかを明確にすることができます。

r'\b(Red|red)\b'

このパターンでは単語として独立している Red か red にマッチします。

Red Rose
✕ reduce the workload
サンプルコード

簡単なサンプルで試してみます。

import re

pattern = re.compile(r'\b(Red|red)\b')

print(bool(pattern.search('Red Rose')))
>> True
print(bool(pattern.search('reduce the workload')))
>> False
print(bool(pattern.search('Border color is red')))
>> True
print(bool(pattern.search('predict a result')))
>> False

-- --

Python の正規表現で複数の文字列のいずれかにマッチするパターンを記述する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。