【Python】文字列操作:find()、index() 文字列の検索

  • URLをコピーしました!

皆さん、こんにちは(こんばんは)、「大-はなまる(@oooohanamaru)」です。

嫁ちゃん
嫁ちゃん
指定した文字列が文字列内のどの位置(インデックス)にあるか知りたいんですけど?
わたし
わたし
str型の find() メソッドを使えば、文字列の位置がわかるよ!
目次

はじめに

str型には find() や index() メソッドが用意されており、文字列中に指定した文字列がどの位置(インデックス)にあるか調べることができます。index() メソッドは、指定した文字列が見つからなかったとき、ValueError が送出します。

用法

str.find(sub[, start[, end]]))

文字列のスライス s[start:end] に部分文字列 sub が含まれる場合、その最小のインデックスを返します。オプション引数 start および end はスライス表記と同様に解釈されます。 sub が見つからなかった場合 -1 を返します。
組み込み型 – Pythonドキュメント から引用

str.index(sub[, start[, end]]))

find() と同様ですが、部分文字列が見つからなかったとき ValueError を送出します。
組み込み型 – Pythonドキュメント から引用

例.部分文字列が見つかった場合

s = 'This is a pen.'
print(s)
print(s.find('i'))
print(s.index('i'))

find()、index() メソッド共に同じ結果が表示されましたね。文字列の中には ‘i’ が2回出てきますが、はじめに見つかった位置(インデックス)を返します。インデックスの先頭は0です。

This is a pen.
2
2
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| T | h | i | s |   | i | s |   | a |   | p | e | n | . |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
0   1   2   3   4   5   6   7   8   9   10  11  12  13  14

例.部分文字列が見つからなかった場合

s = 'This is a pen.'
print(s)
print(s.find('z'))
print(s.index('z'))

部分文字列が見つからなかった場合、find() メソッドは -1 を返しますが、index() は ValueError を送出します。

This is a pen.
-1
ValueError: substring not found

try except でエラー発生時の例外処理をおこないます。

s = 'This is a pen.'
try:
    print(s.index('z'))
except ValueError as e:
    print(e)
substring not found

例.検索範囲の開始位置を指定する場合

s = 'This is a pen.'
print(s)
print(s.find('i'), 3)
print(s.index('i'), 3)

検索範囲の開始位置のインデックスが 3 になっていますので、2つ目の ‘i’ の位置である 5 を返します。

This is a pen.
5
5
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| T | h | i | s |   | i | s |   | a |   | p | e | n | . |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
0   1   2   3   4   5   6   7   8   9   10  11  12  13  14

例.検索範囲の開始・終了位置を指定する場合

s = 'This is a pen.'
print(s)
print(s.find('pen'), 3, 13)
print(s.index('pen'), 3, 13)

検索範囲の終了位置のインデックスに 13 を指定しました。0 から数えて 12番目 では、’n’ が含まれないことに注意が必要です。

This is a pen.
10
10
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| T | h | i | s |   | i | s |   | a |   | p | e | n | . |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
0   1   2   3   4   5   6   7   8   9   10  11  12  13  14

おわりに

嫁ちゃん
嫁ちゃん
部分文字列がどの位置(インデックス)にあるかわかりましたねー♪
わたし
わたし
開始位置、終了位置の指定の仕方は、Pythonのスライスと同じように使えるね。

この記事がお役に立ちましたら幸いです。

では、また。

※本サイトの漫画やイラストはフィクションであり、実在の製品・団体・人物・地名とは関係ありません。
※本サイトに掲載する情報には充分に注意を払っておりますが、その内容について保証するものではありません。
※本サイトの使用ならびに閲覧によって生じたいかなる損害にも責任を負いかねます。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次