この記事では、Pythonの正規表現で特定の文字グループ(数字、英数字、空白など)にマッチさせるための便利なショートカットである、文字集合
(キャラクタークラス)について解説します。
主要な文字集合
正規表現では、頻繁に使用される文字の集まりに対して、\d
のような短い特殊なシーケンスが定義されています。これらを使うことで、パターンをより簡潔に記述できます。
コード | 意味 | 反対のコード | 反対の意味 |
\d | 0から9までの任意の数字 | \D | 数字以外 の任意の文字 |
\w | 任意の英数字 (a-z, A-Z, 0-9)とアンダースコア_ | \W | 英数字とアンダースコア以外 の任意の文字 |
\s | スペース 、タブ 、改行 などの任意の空白文字 | \S | 空白文字以外 の任意の文字 |
文字集合の使用例
これらの文字集合を組み合わせることで、特定の構造を持つテキストを効率的に抽出できます。例えば、「(1つ以上の数字)(空白)(1つ以上の英数字)
」というパターンに一致する部分をテキストからすべて見つけてみましょう。
このパターンは、正規表現では \d+\s\w+
と表現できます。
\d+
: 1つ以上の数字\s
: 1つの空白文字\w+
: 1つ以上の英数字
import re
log_entry = "Processed 15 records, 5 errors, and 100 warnings successfully."
# パターン: (数字+) (空白) (英数字+)
pattern = re.compile(r'\d+\s\w+')
# パターンに一致するすべての部分を検索
results = pattern.findall(log_entry)
print(results)
実行結果:
['15 records', '5 errors', '100 warnings']
このように、文字集合を使うことで、テキストログから数量と対象をペアで簡単に抜き出すことができました。
独自の文字集合を作成する:角括弧 []
\d
や\w
で定義されているもの以外に、独自の文字集合を定義したい場合は、角括aho []
を使います。角括弧で囲まれた中のいずれか1文字にマッチします。
母音にマッチさせる: [aeiouAEIOU]
は、小文字または大文字の母音のいずれか1文字にマッチします。
範囲を指定する: ハイフン-
を使うことで、文字や数字の範囲を指定できます。例えば、[a-zA-Z]
はすべてのアルファベットに、[0-5]
は0から5までの数字にマッチします。
否定形を作る: 角括弧内の先頭にキャレット^
を置くと、その集合に含まれない任意の1文字にマッチします。例えば、[^aeiouAEIOU]
は母音以外のすべての文字にマッチします。
import re
text = "The quick brown fox jumps over 10 lazy dogs."
# 母音をすべて見つける
vowel_regex = re.compile(r'[aeiou]')
vowels = vowel_regex.findall(text)
print(f"母音: {vowels}")
# 数字以外をすべて見つける
non_digit_regex = re.compile(r'[^0-9]')
non_digits = non_digit_regex.findall(text)
print(f"数字以外の文字: {non_digits}")
まとめ
正規表現の文字集合は、コードを簡潔にし、可読性を高めるための重要な機能です。\d
や\w
などの定義済みショートカットと、角括弧[]
による独自の文字集合を使い分けることで、あらゆるテキストパターンに柔軟に対応することができます。