Pythonで文字列を検索したい!さまざまな検索方法を簡単に解説


Pythonで文字列を検索したいけどどうやれば良いのかわからない
複雑な文字列なのでどうにか検索できないだろうか
文字列の存在や、インデックスも検索したい

Pythonで文字列の検索を行うとき上記のような悩みを抱えている方は多いのでないでしょうか。

こんにちは。Python文字列検索マスターのかいです。本記事は、Pythonで検索を行うときに頭を悩ませている方を対象にさまざまなパターンや、検索方法を解説していきます!

この記事はこんな人のためにかきました。

  • Pythonで文字列の検索の知り方を知りたい人
  • 文字のインデックスを知りたい人
  • 文字の存在を調べたい人
  • 複雑な文字列を検索したい人

Pythonでの検索方法についてパターン別に解説していきますのでぜひご覧ください。

Pythonで検索するには

Pythonには文字列を検索するために、様々な関数が用意されています。基本的に行いたい動作は全て実現できるので諦めずに詳しく見ていただければ幸いです。

Pythonで検索するには基本的に以下の関数を使います。

  • find
  • in
  • count
  • re.search

本記事ではこのそれぞれについて実際のコードを示しながら動作確認を行っていくので用途に合わせて確認していただければと思います。

文字のインデックスを知りたいとき

それでは、まずは文字のインデックスを知りたいときの解説からしていきます。文字のインデックスとは具体的に、いうと、”sayhello”という文字列があったとき、”hello”は何番目にくるのだろう、ということですね。

返り値は数値

まず抑えておいて欲しいのは、返り値はインデックスなのでつまり数値として帰ってきます。ここを抑えておかないと後からしたいことがうまく動作しないかもしれないのでしっかり押さえておきましょう。

Pythonで検索を行う上で、返ってくる値はboolintかオブジェクトです。

findを使おう

さて、それでは実際に文字のインデックスを検索してみます。インデックスの検索にはfindを使います。まずは以下のコードをみてください。

みてわかるように、findは標準ライブラリなので特にライブラリをインポートすることなく利用できます。それでは実行結果をみてみましょう。

このように、”hello”が3番目から始まるということがわかりますね。返り値がintであることも確認できます。

ここで重要なのは、スペースも一文字としてカウントされるということなので覚えておきましょう。また、最終行からわかるように、文字列が存在しない場合は-1が返ってきます。

余談ですが、インデックスなので0からカウントされます。

rfindを使おう

先ほどは先頭から検索していましたが、rfindを使うと、末尾から文字を検索して一致箇所を探せます。

文字の存在を確かめたいとき

次は、文字列の存在を確かめたいときのコードを見ていきましょう。筆者は一番利用頻度が高いですね。

返り値はbool

存在を確かめるので答えはYes, Noつまり、True or Falseのbool値で返ってきます。数字よりも明示的にTrue Falseがわかるので分岐がさせやすいですね。

inを使おう

存在を確かめるには、in を使います。実際のコードを見てみましょう。

このように、返り値がboolであること、文字単体でも検索できることがわかりますね。2回以上検索されてもTrueで返ってきます。

文字の数を数えたいとき

上記のように、文字の存在を確かめた時、何回出現したかということも大切ですよね。ここでは、出現回数をカウントする方法をみていきます。

返り値は数値

こちらも出現回数なので返り値はintです。必要に応じてキャストしましょう。

countを使おう

出現回数をカウントするにはcountを使います。そのままですね。実際に見ていきましょう。

このように、文字列や文字の出現回数を確認できますね。値がintで返ってきていることも確認できます。

上記で対応できない複雑な文字列を検索するとき

さて、これまでに文字列をインデックスであったり、出現回数であったり、存在であったりを確認してきましたが、シンプルな例でしたよね。情報を処理などしているともっと複雑な検索を強いられることもあります。

最後に複雑な場合の検索方法についてみていきましょう。複雑な場合は正規表現というものを使います。

正規表現とは

正規表現とは、文字列の集合を一つの文字列で表現する方法のことですね。少しわかりにくいですね。

わかりやすくいうと、その文字列がどのような文字パターンで集まっているかを一つの文字列で示すものです。

具体例を挙げてみると、"sayhello"、"mountain"などの文字列は、[a-z]+で表すことができ、”sayhello”、”saygoodnight”、”saygoodmorning"などの文字列は、say…と表すことができます。

正規表現には様々なルールがありそれを学ぶにも少しコストがかかるので詳しくは以下の記事を参考にしてみてください。

【Python入門】正規表現の使い方を初心者向けに解説
更新日 : 2019年9月1日

返り値はオブジェクト

正規表現を実際にPythonで正規表現を使うときはreというライブラリを用います。正規表現を使って検索をするときは、re.searchを使うのですが、この時は返り値はオブジェクトなので気をつけましょう。

返り値がオブジェクト?ということの説明は次章で行なっていきます。

reを使おう

さて、reを使うには、インポートが必要なので忘れないようにしましょう。実際にコードをみていきます。

コードを見てわかるように、アルファベットを抽出するという正規表現で文字列の検索を行いました。7行目のプリントから、以下が確認できますよね。

これがオブジェクトでこの中にデータがたくさんつまっています。このオブジェクトから、8行目以降のメソッドを指定してやることで欲しい情報を抜き出すことができます。

代表的なメソッドと、意味はコードのコメントの通りです。

まとめ

いかがでしたでしょうか。Pythonの文字列検索について、様々な方法をみてきました。複雑なものでも、正規表現を用いれば大体の検索は可能です。

正規表現を学ぶのも少しコストがかかりますが、参考リンクなどをみながらマスターし、文字列検索マスターになってくださいね!

それでは!!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

かい

かい

日向徹かこよすぎか

[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説