Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】正規表現の文字クラス内で使われるメタ文字とは?基本をわかりやすく解説

メタ文字とは何か

ほとんどの英字や記号は、その文字自身にそのままマッチします。しかし、メタ文字と呼ばれる一部の特殊な文字は、自分自身にはマッチしません。代わりに、特定のパターンへのマッチを指示したり、正規表現の一部を繰り返したり変化させたりする役割を担います。

Pythonの正規表現で使われるメタ文字は、以下の12種類です。

. ^ $ * + ? { } [ ] \ | ( )

文字クラス [ ] の基本的な使い方

まず注目すべきは [] です。これらは文字クラスを表すために使われます。文字クラスとは、「マッチさせたい文字の集合」のことです。

文字は個別に列挙してもよいですし、2つの文字をハイフン(-)でつなげて範囲として指定することもできます。

  • [xyz] … x、y、z のいずれか1文字にマッチ
  • [x-z] … 範囲指定により、上記と同じ文字の集合を表現
  • [a-z] … 小文字のアルファベットのみにマッチ

文字クラス内ではメタ文字が無効になる

重要なポイントとして、メタ文字は文字クラスの中では特別な意味を失います。例えば [abc$] は 'a'、'b'、'c'、'$' のいずれかの文字にマッチします。通常 '$' はメタ文字ですが、文字クラス内ではその特殊な性質が取り除かれ、単なる文字として扱われるのです。

先頭の ^ で「否定」を表す

文字クラスの最初の文字として ^ を置くと、「このクラスに含まれない文字」すべてにマッチするという意味になります。例えば [^8] は '8' 以外の任意の1文字にマッチします。

最も重要なメタ文字:バックスラッシュ(\)

おそらく最も重要なメタ文字はバックスラッシュ(\)です。バックスラッシュは、他のすべてのメタ文字をエスケープするためにも使われます。これにより、メタ文字そのものをパターン内でマッチさせることが可能になります。

例えば、]\ 自体にマッチしたい場合は、直前にバックスラッシュを置いて特殊な意味を打ち消し、\]\\ のように記述します。

Pythonコードでの実行例

実際に re モジュールを使って、文字クラスの動作を確認してみましょう。

import re

# 文字クラス:小文字のみにマッチ
print(re.findall(r'[a-z]+', 'Hello World 123'))   # ['ello', 'orld']

# 否定の文字クラス:数字以外にマッチ
print(re.findall(r'[^0-9]+', 'abc123def'))        # ['abc', 'def']

# メタ文字のエスケープ:リテラルの [] にマッチ
print(re.findall(r'\[\]', '[a] [] b'))            # ['[]']

このように、文字クラスを理解することは正規表現活用の第一歩です。メタ文字の特殊な意味がクラス内で無効になる点や、^ による否定、バックスラッシュによるエスケープを押さえておけば、より柔軟なパターンマッチングができるようになります。

  1. Pythonで正規表現を使って空白以外の文字にマッチさせる方法

    Pythonで正規表現を使って文字列中の「空白以外の文字」を照合するには、\S(大文字のS)という特殊シーケンスを使用します。\S はスペース・タブ・改行などの空白文字以外の任意の1文字にマッチし、+ を組み合わせることで、連続した空白以外の文字列(単語など)をまとめて取得できます。re.search() を使った例次のコードは、指定した文字列から最初に見つかった空白以外の文字の連なりを検索します。import re foo = re.search(r\S+, Need for Speed 2) print(foo)出力<re.Match object; span=(0, 4), mat

  2. Pythonの正規表現で文字列が英数字のみかどうかを判定する方法

    正規表現を使った英数字チェックの基本Pythonで文字列が英字と数字(アルファベット・半角数字)のみで構成されているかどうかを確認するには、標準ライブラリの re モジュールを使用します。具体的には、re.match(regex, string) を呼び出し、パターンとして "^[a-zA-Z0-9]+$" を指定します。この正規表現の意味は以下の通りです。^:文字列の先頭からマッチを開始[a-zA-Z0-9]:英大文字・小文字または数字のいずれか1文字+:直前のパターンが1回以上繰り返される$:文字列の末尾まで一致することを保証実行例>>> import