Python Tutorials

Pythonによる正規表現マスター

Spread the love

Pythonにおける正規表現の習得

正規表現(regexまたはregexp)は、文字列内のパターンマッチングのための強力なツールです。Pythonのreモジュールは、正規表現を扱うための包括的なインターフェースを提供し、高度なテキスト操作とデータ抽出を可能にします。このチュートリアルでは、必須の関数と概念を説明し、Pythonプロジェクトで正規表現の力を効果的に活用できるようにします。

目次

  1. re.match():先頭からのマッチング
  2. re.search():最初のマッチングの検索
  3. re.compile():パフォーマンスの最適化
  4. フラグ:マッチング動作の変更
  5. 文字セット:許容される文字の定義
  6. re.sub()による検索と置換
  7. re.findall():すべてのマッチングの抽出
  8. re.finditer():マッチングの反復処理
  9. re.split():パターンによる文字列の分割
  10. 基本パターン:アンカー、文字クラス
  11. 繰り返し:量子化子と貪欲マッチングと非貪欲マッチング
  12. 特殊シーケンス:数字、空白、単語文字
  13. re.escape():特殊文字の処理
  14. キャプチャグループとgroup()メソッド

1. re.match():先頭からのマッチング

re.match()関数は、文字列の先頭でのみパターンにマッチしようとします。成功した場合はマッチオブジェクトを、そうでない場合はNoneを返します。


import re

text = "Hello World"
pattern = "Hello"
match = re.match(pattern, text)

if match:
    print("Match found:", match.group(0))
else:
    print("No match found")

re.search()は、パターンが最初に発生する場所を文字列全体でスキャンします。re.match()とは異なり、先頭でマッチする必要はありません。


import re

text = "Hello World"
pattern = "World"
match = re.search(pattern, text)

if match:
    print("Match found:", match.group(0))
else:
    print("No match found")

3. re.compile():パフォーマンスの最適化

特に同じパターンを繰り返し使用する場合は、re.compile()を使用してコンパイルすることでパフォーマンスを向上させることができます。これにより、再利用可能なパターンオブジェクトが作成されます。


import re

compiled_pattern = re.compile(r"d+")  # パターンのコンパイル
text1 = "There are 123 apples"
text2 = "And 456 oranges"

match1 = compiled_pattern.search(text1)
match2 = compiled_pattern.search(text2)

print(match1.group(0))  # 出力:123
print(match2.group(0))  # 出力:456

4. フラグ:マッチング動作の変更

フラグはマッチングプロセスを変更します。re.IGNORECASEは大文字と小文字を区別しないマッチングを行い、re.MULTILINEは各行を^$アンカーに対して個別の文字列として扱います。


import re

text = "Hello world"
pattern = re.compile("hello", re.IGNORECASE)
match = pattern.search(text)
print(match.group(0))  # 出力:Hello

5. 文字セット:許容される文字の定義

文字セット([])は、許容される文字を指定します。たとえば、[a-z]は小文字にマッチします。


import re

text = "abc123XYZ"
pattern = re.compile("[a-z]+")
match = pattern.search(text)
print(match.group(0))  # 出力:abc

6. re.sub()による検索と置換

re.sub()は、パターンを置換文字列で置き換えます。


import re

text = "Hello World"
new_text = re.sub("World", "Python", text)
print(new_text)  # 出力:Hello Python

7. re.findall():すべてのマッチングの抽出

re.findall()は、重複しないすべてのマッチングのリストを返します。


import re

text = "123 abc 456 def"
numbers = re.findall(r"d+", text)
print(numbers)  # 出力:['123', '456']

8. re.finditer():マッチングの反復処理

re.finditer()は、マッチオブジェクトを生成するイテレータを返します。大規模な文字列内の多数のマッチングに対して、よりメモリ効率が良いです。


import re

text = "123 abc 456 def"
for match in re.finditer(r"d+", text):
    print(match.group(0))  # 出力:123、456(別々の行に)

9. re.split():パターンによる文字列の分割

re.split()は、パターンに基づいて文字列を分割します。


import re

text = "apple,banana,cherry"
fruits = re.split(r",", text)
print(fruits)  # 出力:['apple', 'banana', 'cherry']

10. 基本パターン:アンカー、文字クラス

  • .:改行文字を除く任意の文字にマッチします。
  • ^:文字列の先頭にマッチします。
  • $:文字列の末尾にマッチします。
  • []:文字の集合にマッチします(例:[abc][a-z])。
  • [^...]:集合に含まれない任意の文字にマッチします(否定文字集合)。

11. 繰り返し:量子化子と貪欲マッチングと非貪欲マッチング

  • *:0回以上の出現。
  • +:1回以上の出現。
  • ?:0回または1回の出現。
  • {m}:正確にm回の出現。
  • {m,n}m回からn回までの出現。
  • *?+???{m,n}?:非貪欲バージョン(最短の文字列にマッチする)。

12. 特殊シーケンス:数字、空白、単語文字

  • d:任意の数字(0~9)にマッチします。
  • D:任意の数字以外の文字にマッチします。
  • s:任意の空白文字(スペース、タブ、改行)にマッチします。
  • S:任意の空白文字以外の文字にマッチします。
  • w:任意の英数字(文字、数字、アンダースコア)にマッチします。
  • W:任意の英数字以外の文字にマッチします。

13. re.escape():特殊文字の処理

re.escape()は文字列内の特殊文字をエスケープし、意図しない正規表現の解釈なしにリテラルパターンとして使用できるようにします。

14. キャプチャグループとgroup()メソッド

括弧()はキャプチャグループを作成します。group()メソッドは、キャプチャされた部分文字列にアクセスします。


import re

text = "My phone number is 123-456-7890"
match = re.search(r"(d{3})-(d{3})-(d{4})", text)
if match:
    area_code = match.group(1)
    prefix = match.group(2)
    line_number = match.group(3)
    print(f"Area Code: {area_code}, Prefix: {prefix}, Line Number: {line_number}")

このチュートリアルは、Pythonのreモジュールの堅実な基礎を提供します。高度なテクニックのさらなる探求は、文字列処理能力を大幅に向上させます。完全なリファレンスについては、公式のPythonドキュメントを参照してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です