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

Pythonのre.search()関数の使い方を徹底解説

re.search()関数とは

Pythonのre.search()関数は、正規表現(RE)パターンが文字列内で最初に出現する位置を検索するための関数です。オプションとしてフラグを指定することもできます。

似た関数であるre.match()が文字列の先頭からのみマッチを試みるのに対し、re.search()は文字列全体を走査して、どこかにパターンに一致する部分があればそれを見つけ出せるという点が大きな違いです。

構文

この関数の基本的な構文は以下の通りです。

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

パラメータの説明

No.パラメータと説明
1pattern
マッチさせたい正規表現パターンを指定します。
2string
検索対象となる文字列です。この文字列の中からパターンに一致する部分が探されます。
3flags
ビット単位OR演算子(|)を使うことで、複数のフラグを同時に指定できます。主なフラグは以下の表を参照してください。

主なフラグの一覧

フラグ説明
re.I(re.IGNORECASE)大文字・小文字を区別せずにマッチします。
re.M(re.MULTILINE)^ と $ を各行の先頭・末尾として扱います。
re.S(re.DOTALL). (ドット)が改行文字にもマッチするようになります。
re.X(re.VERBOSE)正規表現内にコメントや空白を記述でき、可読性が向上します。

戻り値とmatchオブジェクト

re.search()は、マッチに成功した場合にはmatchオブジェクトを返し、失敗した場合にはNoneを返します。マッチした内容を取得するには、matchオブジェクトのgroup(num)またはgroups()メソッドを使用します。

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

使用例

以下のコードでは、「Cats are smarter than dogs」という文字列から、(.*) are (.*?).* というパターンを使って情報を抽出しています。

#!/usr/bin/python
import re

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

if searchObj:
    print("searchObj.group() : ", searchObj.group())
    print("searchObj.group(1) : ", searchObj.group(1))
    print("searchObj.group(2) : ", searchObj.group(2))
else:
    print("Nothing found!!")

実行結果

上記のコードを実行すると、次のような結果が出力されます。

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

結果の解説

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

このように、re.search()とmatchオブジェクトのメソッドを組み合わせることで、文字列から柔軟に必要な部分だけを抽出することができます。

  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