Python 正規表現

PythonPythonBeginner

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

正規表現(「regex」とも呼ばれます)は、文字列操作に強力なツールです。これを使うと、様々な方法で文字列を検索、編集、操作することができます。この実験では、Python で正規表現を使う基本を学びます。

達成目標

  • 正規表現

re モジュールをインポートする

Python で正規表現を使うには、re モジュールをインポートする必要があります。

新しい Python インタプリタセッションを開き、次のコードを入力します。

python3

Python スクリプトの先頭に次の行を追加します。

import re

正規表現をコンパイルする

文字列内のパターンを検索するために正規表現を使用する前に、まずそれをコンパイルする必要があります。正規表現をコンパイルするには、re.compile() 関数を使用できます。

たとえば、次のコードは、文字列内の文字 "a" を検索する正規表現をコンパイルします。

regex = re.compile(r"a")

文字列の前の r は、それが "raw" 文字列であることを示しており、これはバックスラッシュがエスケープ文字ではなくリテラル文字として扱われることを意味します。これは、混乱を避けるために正規表現を使用する際に一般的に推奨される方法です。

search() メソッドを使用する

これで正規表現をコンパイルしたので、search() メソッドを使って文字列内のパターンを検索できます。

たとえば、次のコードは文字列 "cat" 内の文字 "a" を検索します。

match = regex.search("cat")
print(match) ## 出力:<re.Match object; span=(1, 2), match='a'>

search() メソッドは、パターンが見つかった場合に Match オブジェクトを返し、見つからなかった場合は None を返します。

match() メソッドを使用する

match() メソッドは search() メソッドと似ていますが、文字列の先頭のみでパターンを一致させます。

たとえば、次のコードは文字列 "catdog" の先頭でパターン "cat" を一致させます。

regex = re.compile(r"cat")
match = regex.match("catdog")
print(match) ## 出力:<re.Match object; span=(0, 3), match='cat'>

findall() メソッドを使用する

findall() メソッドは、文字列内のパターンのすべてのインスタンスのリストを返します。

たとえば、次のコードは文字列 "cat" 内のすべての文字 "a" を見つけます。

regex = re.compile(r"a")
matches = regex.findall("cat")
print(matches)  ## 出力:["a"]

より複雑なパターンを一致させるために、正規表現で使用できる特殊文字はたくさんあります。以下はいくつかの例です。

  • .(ドット)は任意の 1 文字と一致します
  • * は直前の文字を 0 回以上繰り返します
  • + は直前の文字を 1 回以上繰り返します
  • ? は直前の文字を 0 回または 1 回繰り返します
  • [文字列表現] は角括弧内の文字のいずれか 1 文字と一致します

グループを使用する

正規表現では、パターンの特定の部分を抽出するためにグループを使用できます。グループは、パターンの一部を丸括弧で囲むことによって作成されます。

たとえば、次の正規表現は "cat" で始まり "dog" で終わる任意の単語と一致します。

regex = re.compile(r"cat(.*)dog")

その後、Match オブジェクトの group() メソッドを使用して、グループによって一致したパターンの部分を抽出できます。たとえば:

match = regex.search("catdog")
print(match.group(1))  ## 出力:"" (空文字列)

match = regex.search("catfooddog")
print(match.group(1))  ## 出力:"food"

sub() メソッドを使用する

sub() メソッドを使うと、文字列内のパターンのすべてのインスタンスを別の文字列に置き換えることができます。

たとえば、次のコードは文字列 "cat" 内のすべての文字 "a" を文字 "b" に置き換えます。

regex = re.compile(r"a")
new_string = regex.sub("b", "cat")
print(new_string)  ## 出力:"cbt"

split() メソッドを使用する

split() メソッドを使うと、文字列をパターンで分割できます。

たとえば、次のコードは文字列 "cat dog" を空白文字で分割します。

regex = re.compile(r" ")
words = regex.split("cat dog")
print(words)  ## 出力:["cat", "dog"]

Regex101

Regex101 は、任意の文字列を対象に正規表現をテストできるオンラインの正規表現テストツールです。正規表現のデバッグや開発に役立つリソースであり、正規表現の一致やエラーに関する詳細な情報を提供します。

  • https://regex101.com

Regex101 を使用するには、「Regex」フィールドに正規表現を入力し、「Test String」フィールドにテスト対象の文字列を入力します。入力すると、ツールは文字列内の一致箇所をハイライト表示し、「Result」セクションにエラーや警告も表示します。

正規表現のテストに加え、Regex101 にはいくつかの便利な機能もあります。たとえば、正規表現を保存して共有する機能、一般的な正規表現パターンのライブラリ、ツールの一致方法をカスタマイズするオプションなどです。

全体的に、Regex101 は Python や他のプログラミング言語で正規表現を扱う人にとって貴重なツールです。

まとめ

この実験では、Python で正規表現を使って文字列を検索、一致させ、操作する方法を学びました。正規表現をコンパイルする方法、search()match()findall()sub()などのさまざまなメソッドの使い方、およびより複雑なパターンを一致させるための特殊文字やグループの使い方を学びました。

これが役立てば幸いです!質問があれば教えてください。