この記事では、Pythonの正規表現で\d
(数字)や\w
(英数字)といった定義済みの文字集合(キャラクタークラス)以外に、角括弧[]
を用いて独自の文字集合を定義する方法について解説します。
角括弧[]
による文字集合の定義
角括弧[]
を使用すると、マッチさせたい文字を任意にリストアップして、独自の文字集合を作成できます。角括弧内に含まれるいずれか1文字にマッチします。
例えば、[aeiouAEIOU]
というパターンは、すべての母音(小文字および大文字)にマッチします。
import re
text = "A quick brown fox jumps over the lazy dog."
# 母音にマッチする正規表現
vowel_regex = re.compile(r'[aeiouAEIOU]')
# テキストからすべての母音を検索
vowels_found = vowel_regex.findall(text)
print(vowels_found)
実行結果:
['A', 'u', 'i', 'o', 'o', 'u', 'o', 'e', 'e', 'a', 'o']
否定文字集合
角括弧内の先頭にキャレット^
を置くと、その意味が反転します。これは否定文字集合
となり、角括弧内に含まれていない任意の1文字にマッチするようになります。
例えば、子音(母音以外のアルファベット)をすべて見つけたい場合は、母音を否定するパターンを作成します。
import re
text = "A quick brown fox jumps over the lazy dog."
# 母音、空白、ピリオド以外の文字(つまり子音)にマッチする正規表現
consonant_regex = re.compile(r'[^aeiouAEIOU\s.]')
# テキストからすべての子音を検索
consonants_found = consonant_regex.findall(text)
print(consonants_found)
実行結果:
['q', 'c', 'k', 'b', 'r', 'w', 'n', 'f', 'x', 'j', 'm', 'p', 's', 'v', 'r', 't', 'h', 'l', 'z', 'y', 'd', 'g']
この例では、母音だけでなく空白(\s
)とピリオド(.
)も除外することで、純粋な子音のリストを取得しています。
範囲の指定
角括弧内では、ハイフン-
を使って文字の範囲を指定することもでき、パターンを短く記述できます。
[a-z]
: すべての小文字アルファベット[A-Z]
: すべての大文字アルファベット[0-9]
: すべての数字
これらを組み合わせることも可能です。例えば、[a-zA-Z0-9]
は\w
とほぼ同じ意味になります(ただしアンダースコアは含まれません)。
まとめ
正規表現における角括弧[]
は、非常に柔軟なパターンマッチングを可能にする強力な機能です。単純な文字のリストアップだけでなく、キャレット^
による否定や、ハイフン-
による範囲指定を組み合わせることで、テキストから必要な情報をより正確に抽出することができます。