Pythonの正規表現入門:matchとsearchの違いをわかりやすく解説
Pythonには、正規表現(regular expression)に基づく2つの基本的な操作が用意されています。
- match:文字列の先頭でのみ、パターンとの一致をチェックします。
- search:文字列内の任意の位置でパターンとの一致を探します(Perlがデフォルトで行う動作はこちらです)。
サンプルコード
以下は、re.match()とre.search()の動作の違いを確認できるPython 3のコード例です。
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs"
# 文字列の先頭のみをチェック
matchObj = re.match(r'dogs', line, re.M | re.I)
if matchObj:
print("match --> matchObj.group() : ", matchObj.group())
else:
print("No match!!")
# 文字列全体からパターンを検索
searchObj = re.search(r'dogs', line, re.M | re.I)
if searchObj:
print("search --> searchObj.group() : ", searchObj.group())
else:
print("Nothing found!!")
実行結果
上記のコードを実行すると、次のような結果が出力されます。
No match!! search --> searchObj.group() : dogs
結果の解説
この例では、対象となる文字列は「Cats are smarter than dogs」です。
re.match()は文字列の先頭しかチェックしないため、「Cats」で始まるこの文字列に対してパターン「dogs」は一致せず、「No match!!」と表示されます。- 一方、
re.search()は文字列全体を走査するため、末尾近くにある「dogs」を見つけることができ、マッチオブジェクトが返されます。
なお、フラグとして指定しているre.Iは大文字・小文字を区別しない検索、re.Mは複数行モードを意味します。文字列の途中に含まれる単語を検索したい場合はre.search()を使う、という使い分けを覚えておきましょう。
-
PythonとOpenCVで実現するテンプレートマッチングの基本とマルチスケール対応
テンプレートマッチングとは、実際の画像の中から、あらかじめ用意した小さな画像(テンプレート)と一致する部分を探し出す技術です。基本的にはパターンマッチングの一種であり、物体検出や顔認識など、さまざまなコンピュータビジョンのタスクの基礎となる手法です。PythonではOpenCVモジュールを使うことで、このマッチング処理を簡単に実装できます。本記事では、OpenCVのテンプレートマッチング機能を使った具体的な方法を解説します。OpenCVのインストールOpenCVの機能を利用するには、まずpipでライブラリをインストールします。sudo pip3 install opencv-python閾値(
-
Pythonのmatch()関数とは?reモジュールの基本と使い方を解説
Pythonでは、match()は標準ライブラリのreモジュールが提供するメソッドの一つで、文字列の先頭が指定した正規表現パターンと一致するかどうかを判定するために使用されます。 構文 match()の基本構文は以下の通りです。 re.match(pattern, string) このメソッドは、パターンが文字列の先頭で一致した場合にのみマッチオブジェクトを返します。例えば、文字列「TP Tutorials Point TP」に対してパターン「TP」を検索すると、文字列が「TP」で始まっているためマッチします。しかし、パターンとして「Tutorials」を指定した場合、文字列の先頭に存在し