Python3の勉強がてらプログラミングの問題を解いていた時、ある文字列の中に特定の文字列が含まれるかどうかを調べる必要がありました。例えば、”Morning”という文字列に”ning”が含まれているかどうか調べたりするような状況です。
正規表現を使う方法を思いつきましたが、in演算子でもっと簡単にできることがわかったのでメモしておこうと思います。
文字列のin演算子
Pythonではin演算子を使って、“A in B”のように記述することで“AがBに含まれる”かどうか調べることができます。
$ python
>>> "ing" in "Morning" # "ing" が "Morning"に含まれる場合、Trueを返します。
True
>>> "Morning" in "ing"
False
>>> asa = "Morning"
>>> "ing" in asa # 変数に対しても同様
True
inの左にある文字列がinの右にある文字列に含まれていれば、Trueを返すので”if A in B: hogehoge”のような形で部分文字列のチェックができます。
実際に使ってみる
何はともあれ、実際にコードを書くのが覚えやすいと思います。
ファイルから読み込み特定の文字列が含まれる行と行番号を出力する簡単なサンプルプログラムを作ってみます。
これに下記の内容のテキストファイルを作成し読み込ませて、”ing”という文字列を検索します。ファイル名はてきとうに”find_word_test.txt”としています。
hoge
foo
Morning
bar
hogehoge
ing
ihnoge
index
実行結果は以下のようになります。
$ nl find_word_test.txt
1 hoge
2 foo
3 Morning
4 bar
5 hogehoge
6 ing
7 ihnoge
8 index
$ python find_word.py ing find_word_test.txt
3 : Morning
7 : ing
まとめ
Pythonで部分文字列を検索する方法を調べて、簡単なプログラムを描いてみました。何かしら参考になれば嬉しいです。
参考にですが、find、index、countなどのメソッドでも文字列を含むかを調べられます。
$ python
>>> "Morning".find("ing")
4
>>> "Morning".find("hoge")
-1
>>> "Morning".index("ing")
4
>>> "Morning".index("moge") # indexは例外が発生するので、try-catchしなきゃだめ
Traceback (most recent call last):
File "", line 1, in
ValueError: substring not found
>>> "Morning".count("ing")
1
>>> "Morning".count("n") # countは検索対象が何個含まれるか返す。
2