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におけるテキスト処理やデータ抽出をより効率的に行えるようになります。
-
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\
-
Pythonのre.searchとre.matchの違いとは?正規表現マッチングの使い分けを徹底解説
Pythonのreモジュールには、正規表現でパターンを検索するためのメソッドがいくつか用意されています。その中でもよく使われるのが re.match() と re.search() の2つです。どちらもマッチオブジェクトを返すという点では似ていますが、検索範囲に重要な違いがあります。 re.match():文字列の先頭だけをチェックする re.match() は、パターンが文字列の先頭で一致した場合にのみマッチを返します。文字列の途中にパターンが存在しても、先頭で一致しなければ結果は None になります。 たとえば、文字列「TP Tutorials Point TP」に対してパターン「TP」