本記事ではPythonで文字列検索を行う方法について解説します。
スタンダードな検索方法と正規表現を使う方法についてまとめました。
文字列検索について分からないことがあれば本記事を参考にしてください。
Pythonで文字列検索を行うには?
Pythonで文字列検索を行う方法について解説します。
以下の手順に基づいて説明を行っていきましょう。
- 文字列があるかどうかを判定する
- 含まれる文字列の数を取得する
- 文字列の位置を取得する
- 文字列を後ろから検索する
1)文字列があるかどうかを判定する
最初に文字列があるかどうかを判定する、もっとも単純なプログラムからみていきましょう。
○コード例
text = "Apple Banana Lemon"
print('Banana' in text)
○実行結果
上記のコードは文字列(text)から「Banana」が含まれているかどうかを判定し、結果を出力しています。
Pythonではこのようにin構文を使うことで、文字列検索を行うことが可能です。
文字列が見つかった場合「True」、見つからない場合「False」を返します。
○コード例
text = "Apple Banana Lemon"
print('Grape' in text)
print('banana' in text)
○実行結果
上記の例では共に、文字列が含まれていないため「False」が返されています。
2番目は「B」ではなく「b」となっているため、該当していないことになります。
2)含まれる文字列の数を取得する
続いて、含まれる文字列の数を取得します。
含まれる文字列の数を取得する場合countメソッドが便利です。
○コード例
text = "Apple Banana Lemon Banana"
print(text.count("Banana"))
○実行結果
上記のコードはcountメソッドによって文字列に「Banana」が含まれている数を出力しています。
文字列が1つも含まれていない場合は「0」を返します。
3)文字列の位置を取得する
続いて、文字列の位置を取得する方法を解説します。
文字列の位置を取得する場合はfindメソッドを利用します。
○コード例
text = "Apple Banana Lemon"
print(text.find("Banana"))
print(text.find("Lemon"))
print(text.find("Grape"))
○実行結果
上記のコードではfindメソッドによって文字列の位置をそれぞれ出力しています。
プログラムの世界では「1」ではなく「0」から数えるのが基本です。
「Banana」は0から数えて6番目になるので「6」を出力しています。
なお、「Grape」のようにない文字列を指定した場合、「-1」を出力します。
また、findメソッドは第二引数、第三引数を指定することで、「どこからどこまでを検索対象とするか」を指定することが可能です。
○コード例
text = "Apple Banana Lemon"
print(text.find("Banana", 1, 12))
print(text.find("Banana", 1, 5))
○実行結果
2つ目の例では「1から5まで」を検索対象としています。
Bananaは6番目にありますので、2つ目の例では「-1」が出力されます。
正規表現で文字列検索を行う方法
続いて、正規表現で文字列検索を行う方法について解説します。
正規表現を扱えるようになると、高度な文字列検索も行えるようになります。
今回は正規表現のあくまで初歩について解説していきます。
- 文字列があるかどうかを判定する
- 含まれる文字列の数を取得する
- 文字列の位置を取得する
- 大文字小文字を無視して検索する
正規表現についてより詳しく知りたい方は【初級編5】pythonで正規表現を使って文字列を抽出してみようを参考にしてください。
1)文字列があるかどうかを判定する
先程も行った、特定の文字列があるかを判定するプログラムを書いてみましょう。
○コード例
import re
text = "Apple Banana Lemon"
m = re.search(r"Banana", text)
print(m.group())
○実行結果
searchメソッドを使うと正規表現にマッチする文字列かどうかを判定できます。
searchメソッドを用いる場合、reライブラリが必要になります。
冒頭で必ずreライブラリをインポートしましょう。
上記のコードではsearchメソッドを使い、「Banana」が文字列に含まれているか判定しています。
その後、groupメソッドによって、文字列が含まれている場合のみ、その文字列を出力するようにしています。
2)含まれる文字列の数を取得する
続いて、含まれる文字列の数を取得してみます。
○コード例
import re
text = "Apple Banana Lemon Banana"
m = re.findall(r"Banana", text)
print(m)
print(len(m))
○実行結果
含まれる文字列の数を取得する場合、まずfindallメソッドを使います。
findallメソッドを使うと文字列が含まれている分だけ、配列として文字列を取得できます。
後はlen関数によって配列の数を取得すれば、含まれる文字列の数を出力することが可能です。
3)文字列の位置を取得する
続いて、文字列の位置を取得するプログラムを作成します。
○コード例
import re
text = "Apple Banana Lemon"
m = re.search(r"Banana", text)
print(m.start())
○実行結果
文字列の位置を取得する場合、startメソッドを使います。
上記のコードではstartメソッドによって「Banana」の位置を出力しています。
4)大文字小文字を無視して検索する
最後に、大文字小文字を無視して検索する方法を解説しましょう。
○コード例
import re
text = "Apple Banana Lemon"
m = re.search(r"banana", text, flags=re.IGNORECASE)
print(m.group())
○実行結果
大文字小文字を無視する場合、searchメソッドの第三引数にフラグを指定します。
「re.IGNORECASE」というフラグを指定することで、大文字でも小文字でも関係なく検索することが可能です。
まとめ
本記事ではPythonで文字列検索を行う方法について解説しました。
今回は説明のために短い文章の中から特定文字列を探すプログラムを作成しましたが、もっと長い文章から検索することも可能です。
さらに正規表現を使いこなすことで、特定の形式に基づいた文字列のみを抽出するなども自在にできるようになります。
文字列検索は意外にも奥が深いので、本記事をきっかけに詳しく勉強してみると良いでしょう。