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

Pythonのre.match関数とは?正規表現で文字列をマッチングする方法を解説

re.match() 関数は、指定した文字列の先頭に対して正規表現パターンが一致するかどうかを調べるための関数です。必要に応じてフラグ(flags)を組み合わせて、マッチングの挙動を細かく制御することもできます。

構文

re.match() 関数の基本的な構文は以下のとおりです。

re.match(pattern, string, flags=0)

パラメータの説明

No.パラメータと説明
1pattern
マッチさせたい正規表現パターンを指定します。
2string
検索対象となる文字列です。文字列の先頭からパターンとの一致が試みられます。
3flags
ビット単位のOR演算子(|)を使って、複数のフラグを同時に指定できます。フラグはマッチングの動作を変更する修飾子として機能します。

よく使われる主なフラグ

フラグ説明
re.I大文字・小文字を区別せずにマッチングを行います(IGNORECASE)。
re.M^$ が各行の先頭・末尾にも一致するようになります(MULTILINE)。
re.Sドット(.)が改行文字にも一致するようになります(DOTALL)。

戻り値とmatchオブジェクト

re.match() 関数は、マッチに成功した場合は matchオブジェクト を返し、失敗した場合は None を返します。マッチした実際の文字列を取り出すには、matchオブジェクトが持つ以下のメソッドを使用します。

No.matchオブジェクトのメソッドと説明
1group(num=0)
マッチした文字列全体、または指定した番号(num)のサブグループを返します。
2groups()
マッチしたすべてのサブグループをタプル形式で返します(該当するグループがない場合は空のタプルを返します)。

使用例

次の例では、文字列「Cats are smarter than dogs」に対して正規表現パターンを適用し、マッチした部分を取り出しています。

#!/usr/bin/python
import re

line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)

if matchObj:
    print("matchObj.group() : ", matchObj.group())
    print("matchObj.group(1) : ", matchObj.group(1))
    print("matchObj.group(2) : ", matchObj.group(2))
else:
    print("No match!!")

実行結果

上記のコードを実行すると、以下のような出力が得られます。

matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter

結果の解説

  • group() … パターン全体にマッチした文字列「Cats are smarter than dogs」を返します。
  • group(1) … 最初のキャプチャグループ (.*) に対応する「Cats」を返します。
  • group(2) … 2番目のキャプチャグループ (.*?) に対応する「smarter」を返します。

補足:re.match()とre.search()の違い

re.match()文字列の先頭のみを対象にマッチングを行うのに対し、re.search()文字列全体を走査して最初に一致した箇所を見つけます。文字列の途中にあるパターンを検出したい場合は re.search() を使うのが適切です。用途に応じて両者を使い分けましょう。

  1. Pythonのissubset()関数とは?部分集合の判定方法を実例付きで解説

    本記事では、Python標準ライブラリに用意されているissubset()関数の仕組みと使い方について詳しく解説します。 issubset()メソッドは、あるセット(集合)のすべての要素が、引数として渡した別のセットにも含まれている場合にブール値のTrueを返し、1つでも含まれていない要素があればFalseを返します。 下の図では、BはAの部分集合です。もしAとBが同一のセットであれば、両者は互いに部分集合の関係にあるといえます。つまり、両方のセットがまったく同じ要素を持っているということを意味します。 構文 <set 1>.issubset(<set 2>) 戻り値

  2. Pythonのintersection()関数とは?集合の共通要素(積集合)を求める方法

    この記事では、Pythonのセット(集合)に対して実行できるintersection()関数について詳しく解説します。数学における「積集合(インターセクション)」とは、2つの集合から共通する要素を見つけ出すことを指します。構文<セット名>.intersection(<セットa1>, <セットa2>, …)戻り値引数として渡されたすべての集合に共通する要素(積集合)が、新しいセットとして返されます。使用例set_1 = {t,u,t,o,r,i,a,l} set_2 = {p,o,i,n,t} set_3 = {t,u,t} # 2つの集合の積集合 print