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

Pythonの正規表現入門:match()とsearch()関数の違いと使い方を徹底解説

Pythonの正規表現(regex)では、主に2種類の操作を行うことができます。それが「検索(search)」と「マッチング(match)」です。文字列からパターンを見つけ出し、照合する際に、これら2つの関数を使い分けることで、正規表現を効率的に活用できます。

match() と search() の基本的な違い

ある文字列が与えられたとき、re.match()文字列の先頭のみでパターンとの一致を確認するのに対し、re.search()文字列内のどこにでもパターンが存在するかを確認します。

パターンが見つかった場合、どちらの関数もmatchオブジェクトを返します。見つからなかった場合は None を返します。

  • match() … 文字列の先頭でのみパターンを探し、一致した場合はmatchオブジェクトを返します。
  • search() … 文字列全体からパターンを探し、一致した場合はmatchオブジェクトを返します。

それでは、実際の例を見てみましょう。ここでは、文字列の中から「Engineers」という単語を探します。

例1:match() 関数を使用する場合

import re
pattern = "Engineers"
string = "Scientists dream about doing great things. Engineers Do them"
result = re.match(pattern, string)
if result:
    print("Found")
else:
    print("Not Found")

このコードを実行すると、次の出力が得られます。

出力結果

Not Found

「Engineers」という単語は文字列の途中に存在しますが、match()先頭しか確認しないため、「Not Found」と表示されます。

例2:search() 関数を使用する場合

次に、同じ例を search() を使って試してみましょう。

import re
pattern = "Engineers"
string = "Scientists dream about doing great things. Engineers Do them"
result = re.search(pattern, string)
if result:
    print("Found")
else:
    print("Not Found")

このコードを実行すると、次の出力が得られます。

出力結果

Found

search()は文字列全体を対象にパターンを探すため、文字列の途中にある「Engineers」も見つけることができ、「Found」と表示されます。

まとめ

  • パターンが必ず文字列の先頭にあることを確認したい場合は match() を使用します。
  • パターンが文字列内のどこかに存在するかを確認したい場合は search() を使用します。
  • どちらの関数も、一致が見つかればmatchオブジェクトを、見つからなければ None を返すため、条件分岐と組み合わせて簡単に判定できます。

用途に応じてこの2つの関数を適切に使い分けることで、Pythonにおけるテキスト処理やデータ抽出をより効率的に行えるようになります。

  1. Pythonの正規表現で特定の文字から始まり、特定の文字で終わる部分をマッチさせる方法

    文字列「TestCountry Hello」が与えられているとします。この文字列のうち、「T」で始まり「y」で終わる部分を抽出して表示するには、reモジュールのfindallメソッドを使用します。正規表現パターンには、単語境界のアンカー「\b」と、空白以外の任意の文字を表す「\S」を組み合わせます。 コード例 import re result = re.findall(r\bT\S+y\b, TestCountry Hello) print(result) 実行結果 上記のコードを実行すると、次の出力が得られます。 [TestCountry] パターンの解説 使用した正規表現パターン「\bT\

  2. Pythonのre.searchとre.matchの違いとは?正規表現マッチングの使い分けを徹底解説

    Pythonのreモジュールには、正規表現でパターンを検索するためのメソッドがいくつか用意されています。その中でもよく使われるのが re.match() と re.search() の2つです。どちらもマッチオブジェクトを返すという点では似ていますが、検索範囲に重要な違いがあります。 re.match():文字列の先頭だけをチェックする re.match() は、パターンが文字列の先頭で一致した場合にのみマッチを返します。文字列の途中にパターンが存在しても、先頭で一致しなければ結果は None になります。 たとえば、文字列「TP Tutorials Point TP」に対してパターン「TP」