Python(Python3)で文字列処理をする時に、特定の文字列を検索したい、というような場合があると思います。そのような場合にPythonでは文字列を検索するためのメソッドが多数用意されています。他にもPythonでは文字列を検索できるmatchメソッドやsearchメソッドがあります。しかし、文字列の先頭以外でもマッチする・複数マッチするという点で他の2つのメソッドとは異なる特徴があります。他の検索メソッドとの違いについては、「Pythonで文字列を検索する方法まとめ」で確認してみてください。今回はfindallメソッドの使い方について紹介します。
findallメソッドとは
Pythonで、文字列中の特定のパターンを検索し、マッチする部分を全て取得したいときfindallメソッドを使用します。findallメソッドは正規表現モジュールreの中に含まれており、以下のように呼び出すことが出来ます。
import re re.findall("検索したいパターン","検索する文字列")
第一引数として検索したいパターンを、第二引数として検索する文字列を指定します。一致した部分を文字列のリストとして返します。一致しなかった場合も空のリストが返ります。
第一引数には正規表現を用いることが出来ますが、今回は扱いません。また、第三引数にflagを指定することでオプションをつけることも出来ますが、今回は省略します。Pythonで正規表現を扱う方法と第三引数については別の記事で紹介しています。
Pythonの検索メソッド(match,search,findall)のflagについて
findallメソッドの使い方
マッチした文字列が存在するかどうかはリストの大きさを調べることで判定できます。マッチした部分が存在しないとき、リストの大きさが0となります。リストの大きさは、Pythonの組み込み関数len(変数の長さを表示)を用いて表示できます。
import re str="abcdeabcde" match1=re.findall("bcd",str) match2=re.findall("ace",str) #リストが空のとき if(len(match1)==0): print("空リスト") print(match1) #リストが空でないとき(マッチした部分が存在するとき) else : print("マッチした部分が存在") print(match1) if(len(match2)==0): print("空リスト") print(match2) #リストが空でないとき(マッチした部分が存在するとき) else : print("マッチした部分が存在") print(match2)
実行結果
マッチした部分が存在 ['bcd', 'bcd'] 空リスト []
Pythonの他の文字列検索メソッド(matchやsearch)とは異なり、if文でマッチしているか否か判断できないので注意してください。
マッチした文字列の中身を表示したいときは、for文を使用することで行えます。
import re str="abcdeabcde" match=re.findall("abc",str) for i in match : print(i)
実行結果
abc abc
matchメソッドを用いた実装例
コード例
実際にfindallメソッドを用いて、文章の中に何個の文が含まれているか調べてみます。
import re str='''こんにちは。こんばんは。おはよう。ありがとう。さようなら。''' match=re.findall("。",str) print("文章の個数は",len(match))
実行結果
文章の個数は 5
コードの説明
reモジュールをインポートし、文字列を宣言します。
import re str='''こんにちは。こんばんは。おはよう。ありがとう。さようなら。'''
findallメソッドで「。」を探し、返り値をmatchに格納します。
match=re.findall("。",str)
matchの要素数を調べることで何個の「。」があるか、つまり何個の文章があるか分かります。
print("文章の個数は",len(match))
この記事のまとめ
本記事ではPythonでの文字列検索findallメソッドを、具体例を元に説明しました!最後に記事の要点をまとめます。
- 文字列の検索のときはfindallメソッド
- 引数は検索したいパターンと検索する文字列
- 返り値はリスト
Pythonのsearchメソッドを是非活用してみましょう!