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

Pythonの正規表現修飾子(フラグ)の使い方をわかりやすく解説

Pythonの正規表現では、パターンに修飾子(フラグ)を指定することで、マッチングのさまざまな挙動を制御できます。修飾子は省略可能なオプションとして与えられ、複数のフラグを同時に使いたい場合は、ビット演算子の|(OR)で連結して指定します。

主な正規表現修飾子の一覧

No.修飾子と説明
1re.I
大文字と小文字を区別せずにマッチングを行います。
2re.L
現在のロケール設定に従って単語を解釈します。この指定により、アルファベット系の特殊シーケンス(\w\W)や単語境界(\b\B)の動作が影響を受けます。
3re.M
$ が行末(文字列の末尾だけでなく各行の終わり)に、^ が行頭(文字列の先頭だけでなく各行の始まり)にマッチするようになります。複数行モードとも呼ばれます。
4re.S
ドット(.)が改行文字を含むあらゆる文字にマッチするようになります。デフォルトではドットは改行にマッチしないため、複数行にまたがるテキストを扱う際に便利です。
5re.U
Unicode文字セットに基づいて文字を解釈します。\w\W\b\B の動作に影響します。なお、Python 3ではUnicodeがデフォルトのため、このフラグは後方互換性のために残されています。
6re.X
読みやすさを重視した「拡張」正規表現構文を有効にします。文字クラス [] の内部やバックスラッシュでエスケープされた箇所を除き、空白文字は無視され、エスケープされていない # 以降はコメントとして扱われます。

修飾子の基本的な使い方

修飾子は re.compile()re.search() などの関数にキーワード引数として渡します。

import re

# 大文字小文字を無視して検索する例
pattern = re.compile(r'python', re.I)
match = pattern.search('I love Python programming')
print(match.group())  # 出力: Python

複数の修飾子を組み合わせる

複数のフラグを使いたい場合は、| で連結します。たとえば「大文字小文字を無視しつつ、ドットを改行にもマッチさせたい」場合は次のように書きます。

import re

pattern = re.compile(r'<div>.*?</div>', re.I | re.S)
match = pattern.search('<DIV>line1\nline2</DIV>')
print(match.group())  # 改行をまたいでもマッチする

re.X を使った可読性の高いパターン

re.X(または re.VERBOSE)を使うと、空白やコメントを含めた整形済みの正規表現を記述でき、複雑なパターンの保守性が大きく向上します。

import re

pattern = re.compile(r'''
    (\d{4})   # 年
    -(\d{2})  # 月
    -(\d{2})  # 日
''', re.X)

match = pattern.match('2024-05-01')
print(match.groups())  # 出力: ('2024', '05', '01')

まとめ

正規表現の修飾子を適切に活用すると、大文字小文字の違いを吸収したり、複数行テキストを柔軟に処理したりできるようになり、コードの意図も明確になります。特に re.Ire.Mre.Sre.X は実務で頻繁に使われるため、それぞれの挙動を理解しておくとよいでしょう。

  1. 【初心者向け】Python正規表現のグループ化の仕組みと使い方を徹底解説

    グループ化とは正規表現における「グループ化」とは、パターンの一部を丸括弧 () で囲むことです。これにより、単一の文字だけでなく、グループ全体に対して量指定子(*、+ など)や各種演算子を適用できるようになります。キャプチャグループと後方参照丸括弧には、部分式をひとまとめにする役割に加えて、「キャプチャグループ」を作成する働きもあります。グループ化された部分がマッチした文字列は「後方参照(バックリファレンス)」として保存され、あとから再利用することが可能です。実際の開発では、2つ以上の候補のどれかにマッチする正規表現が必要になる場面が多くあります。また、量指定子を複数の式全体に適用したいケース

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

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