Pythonの文字列検索方法について解説したいと思います。
一般的なfindメソッドから正規表現で文字列するre.searchメソッドのやり方を解説します。
目次
find/rfindメソッドで文字列検索
Pythonでは文字列を検索するのに一般的な方法は、find/rfindメソッドが提供されています。
使用方法は
文字列.find(検索文字,開始位置,終了行)
になります。
戻り値は検索対象文字列の開始位置となります。
サンプルは以下のようになります。
str1='I like apple'
print(str1.find('apple'))
# 7
使用方法は 文字列.rfind(検索文字,開始位置,終了行) になります。
以下がサンプルになります。
str1='sky air airplane'
print(str1.rfind('air'))
# 8
参考:組み込み型find
参考:組み込み型rfind
正規表現re.searchを使って検索
正規表現操作用のreライブラリを利用した文字列検索も可能です。
re.search(検索対象,文字列)
で利用できます。 戻り値は、検索結果オブジェクトを返します。
以下がサンプルになります。
import re
str1='I like apple'
print(re.search('apple',str1))
# <re.Match object; span=(7, 12), match='apple'>
print(re.search('banana',str1))
# None
ですが、上記の例だと少々使いづらい場合もあります。 その他として以下の使い方も可能です。
import re
str1='I like apple'
print(re.search('apple',str1).group())
# apple
print(re.search('apple',str1).start())
# 7
print(re.search('apple',str1).span())
# (7, 12)
print(re.search('apple',str1).end())
# 12
re.findall/re.finditer()を使って検索しリスト型を取得
正規表現操作用のreライブラリを利用した文字列検索でfindallやfinditerメソッドも一般的です。 findallの使い方は
re.findall(検索対象,文字列)
になります。 戻り値は、リスト型データを返します。
以下がサンプルになります。
import re
str1='I like apple,banana,pineapple'
print(re.findall('apple',str1))
# ['apple', 'apple']
findallの使い方はre.finditer(検索対象,文字列) になります。
戻り値は、検索対象文字の開始位置と終了位置を返します。
以下がサンプルになります。
import re
str1='I like apple,banana and orange'
#全てのスタートインデックスの獲得
print([cnt.start() for cnt in re.finditer('apple|orange',str1)])
# [7, 24]
#全てのスタートインデックスと終了インデックスを獲得
print([tmp.span() for tmp in re.finditer('apple|orange',str1)])
# [(7, 12), (24, 30)]
#全ての終了インデックスを獲得
print([lmp.end() for lmp in re.finditer('apple|orange',str1)])
# [12, 30]
in(所属検査演算)を使って文字列の存在確認
Pythonでは文字列を検索する時の存在確認にin (所属検査演算子)も利用できます。
戻り値は検索対象文字列の存在すればTrue、しなければFalseになります。
サンプルは以下のようになります。
str1='I like apple'
str2='apple'
str3='Apple'
print(str2 in str1)
# True
print(str3 in str1)
# False
参考:所属検査演算