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

Python正規表現の繰り返し文字クラスとは?基本の仕組みとバックリファレンスとの違いを解説

繰り返し文字クラスとは

Pythonの正規表現において、文字クラス(character class)に「?」「*」「+」といった量指定子(繰り返し演算子)を組み合わせたものを、繰り返し文字クラスと呼びます。

ここで重要なのは、これらの演算子で繰り返しを行うと、マッチした1文字だけではなく、文字クラス全体が繰り返されるという点です。

文字クラス全体が繰り返される例

たとえば、正規表現 [0-9]+ は「0〜9のいずれかの数字」の1回以上の繰り返しを意味します。そのため、「333」だけでなく「579」のような異なる数字の並びにもマッチします。

import re

print(re.findall(r'[0-9]+', '579'))  # ['579']
print(re.findall(r'[0-9]+', '333'))  # ['333']

マッチした文字そのものを繰り返したい場合:バックリファレンス

「同じ文字が連続する場合だけ」にマッチさせたい場合は、文字クラスの繰り返しではなくバックリファレンス(後方参照)を使用する必要があります。

正規表現 ([0-9])\1+ は、最初にマッチした数字と同じ数字が続くパターンにのみマッチします。つまり「333」にはマッチしますが、「579」にはマッチしません。

import re

m = re.search(r'([0-9])\1+', '922226')
print(m.group())  # '2222'

この正規表現を文字列「922226」に適用すると、文字列の中央にある「2222」にマッチします。

マッチ位置を制御したい場合:先読み・後読み

上記のように文字列の途中にまでマッチしてしまうのを避けたい場合は、先読み(lookahead)後読み(lookbehind)といったゼロ幅アサーションを活用します。これらを組み合わせることで、マッチする位置をより細かく制御できるようになります。

  1. Pythonの正規表現とは?基本の考え方と主な使い方をわかりやすく解説

    正規表現とは何か 正規表現(Regular Expression)とは、文字列の中から特定のパターンを検索したり置換したりするために用いられる、文字の並び(パターン)のことです。シンプルに言えば、「文字列の中から目的のパターンを見つけ出し、必要に応じて書き換えるための記法」と理解するとよいでしょう。 正規表現はPythonだけでなく、Perl、R、Javaなど、ほとんどのプログラミング言語でサポートされており、テキスト処理における共通の基礎技術となっています。 正規表現が活躍する場面 正規表現は、ソースコード、ログファイル、スプレッドシート、さらにはドキュメントといったテキストデータから情報

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

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