・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2024年02月18日に投稿されました。)
Pythonで文字列(String)の位置を取得するにはindex()を使用します。
index()とは、オブジェクトの対象データの位置を取得する関数になります。
そのため、文字列に対して使用すると検索した文字列のの出現位置を取得するようになります。
そして、パラメータを追加することで、文字列の検索範囲を制限して文字列の出現位置を取得することができます。
また、index()以外にも文字列の出現位置を取得する方法はありますが、文字列以外のオブジェクトにも使用できるため、index()の利便性は高いです。
そのため、文字列から検索したい文字列の出現位置を取得したいと思った場合はindex()を使用しましょう。
今回はindex()で文字列(String)の位置を取得する方法について紹介していきます。
文字列から検索する文字列が何番目に出現されているか調べたい場合
文字列に検索する文字列が含まれているか調べたい場合
index()とは
index()とは、オブジェクトから対象のデータの格納位置を検索する関数となります。
そのため、文字列に対して使用することで、検索する文字列の位置を取得することができます。
index()の書き方
文字列に対して使用する場合のindex()の書き方は下記のようになります。
1 | 対象の文字列.index('検索する文字列' [,'開始位置', '終了位置']) |
対象の文字列の後ろにindex()を追記し、括弧の中に必須のパラメータを指定して使用します。
また、追加で任意の引数を2つ指定することができ、合計3つの引数を指定することができます。
index()のパラメータ
index()のパラメータは下記のようになります。
- 検索する文字列:(必須)
文字列から検索したい文字列を指定する。 - 開始位置:(任意)
文字列の検索開始位置をインデックスで指定する。
(検索範囲に含まれる) - 終了位置:(任意)
文字列の検索終了位置をインデックスで指定する。
(検索範囲に含まれない)
index()は必須なパラメータとして「検索する文字」を指定します。
また、任意なパラメータとして「開始位置」と「終了位置」を指定します。
index()の返り値
index()の返り値は「検索した文字列のインデックス」になります。
index()で文字列(String)の位置を取得するサンプルコード
index()で文字列(String)の位置を取得するサンプルコードをご紹介します。
ここでは下記の3パターンでindex()を使用します。
- 検索する文字列が存在する場合
- 検索する文字列が存在しない場合
- 検索する文字列が複数存在する場合
検索する文字列が存在する場合
検索する文字列が存在する場合にindex()を使用すると、検索する文字列の番号を返します。
● main.py
1 2 3 4 5 6 7 | print('● 対象の文字列') text1 = 'Pythonのindex()で文字列から検索したい文字列の位置を検索' print(text1) print("● index()使用後") text1_idx = text1.index('位置') print(text1_idx) |
実行結果
検索する文字列が存在する場合にindex()で文字列(String)の位置を取得しています。
検索した「位置」は文字列の29番目に存在するため、「29」が表示されています。
検索する文字列が存在しない場合
検索する文字が存在する場合にindex()を使用するとエラーが発生します。
● main.py
1 2 3 4 5 6 7 | print('● 対象の文字列') text1 = 'Pythonのindex()で文字列から検索したい文字列の位置を検索' print(text1) print("● index()使用後") text1_idx = text1.index('python') print(text1_idx) |
実行結果
検索する文字列が存在しない場合にindex()で文字列(String)の位置を取得しています。
文字列内に「python」は存在しないため、エラーが発生しています。
検索する文字列が複数存在する場合
検索する文字が複数存在する場合にindex()を使用すると、最初にヒットした文字列の番号を返します。
● main.py
1 2 3 4 5 6 7 | print('● 対象の文字列') text1 = 'Pythonのindex()で文字列から検索したい文字列の位置を検索' print(text1) print("● index()使用後") text1_idx = text1.index('文字列') print(text1_idx) |
実行結果
検索する文字列が複数存在する場合にindex()で文字列(String)の位置を取得しています。
そのため、最初に出現した「文字列」の15番目である「15」が表示されています。
index()で検索範囲を指定して字列(String)の位置を取得する場合
index()で検索範囲を指定して字列(String)の位置を取得するにはパラメータである「検索開始位置」や「検索終了位置」を指定します。
検索開始位置や検索終了位置を指定することで、文字列の検索範囲を制限することができます。
そのため、ここでは下記の2パターンで検索範囲を指定してindex()で文字列(String)の位置を取得します。
開始位置と終了位置を指定する場合
開始位置と終了位置を指定してindex()を使用すると、検索開始位置から検索終了位置までを範囲として文字を検索します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | try: print('● 対象の文字列') text1 = 'Pythonのindex()で文字列から検索したい文字列の位置を検索' print(text1) print("● index()使用後-1") text1_idx1 = text1.index('index()', 4, 30) print(text1_idx1) print("● index()使用後-2") text1_idx2 = text1.index('index()',20, 30) print(text1_idx2) except Exception as e: print(e) |
実行結果
開始位置と終了位置を指定してindex()で文字列(String)の位置を取得しています。
検索範囲を「4〜30」に設定した時、「index()」は範囲内に存在するため、出現位置である「7」が表示されています。
また、検索範囲を「20〜30」に設定した時、「index()」は範囲外であるため、エラーが表示されています。
開始位置のみを指定する場合
開始位置のみを指定してindex()を使用すると、検索開始位置から末尾までを範囲として文字を検索します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | try: print('● 対象の文字列') text1 = 'Pythonのindex()で文字列から検索したい文字列の位置を検索' print(text1) print("● index()使用後-1") text1_idx1 = text1.index('index()', 6) print(text1_idx1) print("● index()使用後-2") text1_idx2 = text1.index('index()', 8) print(text1_idx2) except Exception as e: print(e) |
実行結果
開始位置のみを指定してindex()で文字列(String)の位置を取得しています。
検索範囲を「6〜末尾」に設定した時、「index()」は範囲内に存在するため、出現位置である「7」が表示されています。
また、検索範囲を「8〜末尾」に設定した時、「index()」は範囲外であるため、エラーが表示されています。
index()で文字列(String)の位置を取得する実際のケース
index()で文字列(String)の位置を取得する実際のケースについてご紹介します。
例えば、index()を使用して必須な文字列を入力しないと登録できないようなコードを作成します。
● index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <!DOCTYPE html> <html lang="ja"> <head> <title>index()で文字列が何番目かを検索する</title> <meta charset="utf-8"/> </head> <body> <form action="/result" method="POST"> <p>入力内容</p> <div> <input type=text name='inputVal' value = ''> </div> <div> <input type=radio name='type' value = '1' checked>株式会社 <input type=radio name='type' value = '2'>法人 </div> <button type="submit">登録</button> </form> <div> <p>登録リスト</p> <ul> {% for row in rows %} <li style='font-weight: bold;'>{{ row['company'] }}</li> {% endfor %} </ul> </div> </body> </html> |
● result.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!DOCTYPE html> <html lang="ja"> <head> <title>index()で文字列が何番目かを検索する</title> <meta charset="utf-8"/> </head> <body> {% if flag == 0 %} <h1>入力した内容の登録が完了しました。</h1> {% else %} <h1>入力した内容が登録できませんでした。</h1> <p>必要な文字列が含まれていません。</p> {% endif %} <p><a href ='http:/********'>topに戻る</a></p> </body> </html> |
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | from flask import Flask, render_template, request import mysql.connector import sys app = Flask(__name__) ness_word1 = '株式会社' ness_word2 = '法人' @app.route('/') def index(): try: #データベース接続 cnx = mysql.connector.connect( user='****', password='********', host='*******', database='registerList' ) cursor = cnx.cursor(dictionary=True) sql = ('''SELECT company FROM companies''') cursor.execute(sql) rows = cursor.fetchall() except Exception as e: print(e) finally: return render_template('index.html', rows = rows) @app.route('/result', methods=['POST']) def result(): try: #データベース接続 cnx = mysql.connector.connect( user='****', password='********', host='*******', database='registerList' ) cursor = cnx.cursor(dictionary=True) input = request.form.get('inputVal') type = request.form.get('type') print(input) print(type) if type == '1': idx = input.index(ness_word1) if type == '2': idx = input.index(ness_word2) error_flag = 0 sql = ('''INSERT INTO companies(company) VALUES (%s)''') data = [input] cursor.execute(sql, data) cnx.commit() except Exception as e: print(e) error_flag = 1 finally: return render_template('result.html',flag = error_flag) if __name__ == '__main__': app.run() |
実行結果(登録成功)
実行結果(登録失敗)
index()で会社名や法人名を登録する画面を作成しています。
今回は下記のような処理の流れでindex()を使用していいます。
- ラジオボタンで「株式会社」を選択した場合はindex()で「株式会社」の位置を検索する。
(位置を取得できた場合は3の処理を、取得できない場合は4の処理を実行) - ラジオボタンで「法人」を選択した場合はindex()で「法人」の位置を検索する。
(位置を取得できた場合は3の処理を、取得できない場合は4の処理を実行) - DBに入力した文字列を登録し、登録完了のメッセージを表示する。
- 例外処理を行い、登録エラーのメッセージを表示する。
そのため、「株式会社」を選択し、入力内容に「株式会社」が含まれている場合と「法人」を選択し、入力内容に「法人」が含まれている場合は登録が完了しています。
しかし、「株式会社」を選択し、入力内容に「株式会社」が含まれない場合や「法人」を選択し、入力内容に「法人」が含まれない場合は登録の際にエラーが発生しています。
index()以外で文字列(String)の位置を取得する関数の一覧
Pyhtonではindex()以外にも文字列の位置を取得できる関数が存在します。
そのため、ここではindex()以外で文字列(String)の位置を取得する関数の一覧についてご紹介します。
find()
find()とは、文字列から検索する文字列の位置を検索する関数になります。
今回ご紹介しているindex()とよく似た関数になりますが、エラーの場合は「-1」を返すようになります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象の文字列') text1 = 'Pythonのindex()で文字列から検索したい文字列の位置を検索' print(text1) print("● find()使用後-1") text1_idx1 = text1.find('文字列') print(text1_idx1) print("● find()使用後-2") text1_idx2 = text1.find('python') print(text1_idx2) |
実行結果
find()で文字列(String)の位置を取得しています。
「文字列」は対象の文字列内に存在するため、出現位置である「15」が表示されています。
また、「python」は対象の文字列内に存在しないため、「-1」が表示されています。
rfind()
rfind()とは、文字列の末尾から検索する文字列の位置を検索する関数になります。
こちらもfind()と同様に、エラーの場合は「-1」を返すようになります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象の文字列') text1 = 'Pythonのindex()で文字列から検索したい文字列の位置を検索' print(text1) print("● rfind()使用後-1") text1_idx1 = text1.rfind('文字列') print(text1_idx1) print("● find()使用後-2") text1_idx2 = text1.rfind('python') print(text1_idx2) |
実行結果
rfind()で末尾から文字列(String)の位置を取得しています。
「文字列」は対象の文字列内に存在するため、末尾の出現位置である「25」が表示されています。
また、「python」は対象の文字列内に存在しないため、「-1」が表示されています。
index()をList(リスト)に対して使用する場合
index()をList(リスト)に対して使用すると、リストに格納されている要素の格納位置を取得することができます。
● main.py
1 2 3 4 5 6 7 | print('● 対象のリスト') list1 = ['Pyhtonの', 'index()で', '文字列から', '検索したい', '文字列の位置を', '検索'] print(list1) print('● index()使用後') list1_idx = list1.index('検索') print(list1_idx) |
実行結果
index()でList(リスト)に格納されている要素の格納位置を取得しています。
そのため、「検索」はリストの6番目に格納されているため、「5」が表示されています。
もし、index()でList(リスト)から要素のインデックスを取得する内容について詳しく知りたい場合は下記の記事をご参考ください。
まとめ
● index()とはオブジェクトから対象のデータの格納位置を検索する関数である。
● index()を文字列(String)に対して使用する場合は、下記の引数を指定して使用する。
・検索する文字列:(必須)
・検索開始位置:(任意)
・検索終了位置:(任意)
● 検索する文字列が存在する場合にindex()を使用すると、文字列(String)の出現位置を返す。
● 検索する文字列が存在しない場合にindex()を使用すると、エラーが発生する。
● 検索する文字列が複数存在する場合にindex()を使用すると、最初に一致する文字列(String)の出現位置を返す。
● index()で検索範囲を制限して文字列(String)の出現位置を取得するにはパラメータに「開始位置」と「終了位置」を指定する。
・開始位置と終了インデックスを指定すると、「開始位置~終了位置まで」が検索範囲となる。
・開始位置のみを指定すると、「開始位置~末尾まで」が検索範囲となる。
● index()以外にも下記の関数で文字列(String)の位置を取得することができる。
・find()
(検索文字列を文字列の先頭から検索し、出現位置を返す)
・rfind()
(検索文字列を文字列の末尾から検索し、出現位置を返す)
● index()をList(リスト)に対して使用すると、検索要素が格納されているインデックスを返す。