Pythonで文字列(str型)を扱う際、特定の1文字だけを取得したり、ある範囲の部分文字列を切り出したりする操作は頻繁に行われます。
これらの操作には、**「インデックス(添字)」と「スライス構文」**を使用します。
この記事では、文字列から必要なデータを抽出する基本的な方法について解説します。
目次
1. インデックスによる1文字の取得
文字列は「文字の配列」のように扱われます。文字列変数の後ろに [インデックス番号] を記述することで、その位置にある特定の1文字を取得できます。
重要なルールとして、インデックスは 0 から始まります(先頭の文字は 0 番目)。
具体的な使用例:商品コードの解析
商品コードの先頭の文字がカテゴリを表しているケースを想定します。
# 商品コード
product_code = "A-5091"
# 先頭(0番目)の文字を取得
category_char = product_code[0]
# 2文字目(1番目)の文字を取得
hyphen_char = product_code[1]
print(f"商品コード: {product_code}")
print(f"カテゴリ: {category_char}")
print(f"区切り文字: {hyphen_char}")
実行結果:
商品コード: A-5091
カテゴリ: A
区切り文字: -
負のインデックス(末尾からのアクセス)
インデックスに負の数(マイナス)を指定すると、文字列の末尾から位置を指定できます。 [-1] は最後の文字、[-2] は最後から2番目の文字を指します。
# 末尾の文字(チェックディジットなど)を取得
last_char = product_code[-1]
print(f"末尾の文字: {last_char}")
実行結果:
末尾の文字: 1
2. スライス構文による部分文字列の取得
文字列から「3文字目から5文字目まで」のように、範囲を指定して切り出すにはスライス構文を使用します。
構文:
文字列[開始インデックス : 終了インデックス]
重要な注意点:
- 開始インデックス: 範囲に含まれます。
- 終了インデックス: 範囲に含まれません(その手前までが取得されます)。
具体的な使用例:日時文字列の分割
固定フォーマットの日時文字列から、日付部分と時刻部分をそれぞれ抽出する例です。
# 日時データ (YYYY-MM-DD HH:MM)
timestamp = "2025-12-05 14:30"
# インデックス: 0123456789...
# 日付部分 (0番目から10番目の手前まで)
date_part = timestamp[0:10]
# 時刻部分 (11番目から16番目の手前まで)
time_part = timestamp[11:16]
print(f"全体: {timestamp}")
print(f"日付: {date_part}")
print(f"時刻: {time_part}")
実行結果:
全体: 2025-12-05 14:30
日付: 2025-12-05
時刻: 14:30
インデックスの省略
スライス構文では、開始または終了のインデックスを省略できます。
[開始 :]: 開始位置から最後まで[: 終了]: 先頭から終了位置の手前まで[:]: 全体をコピー
# 11番目から最後まで(時刻部分)
time_only = timestamp[11:]
# 先頭から4番目の手前まで(年部分)
year_only = timestamp[:4]
print(f"時刻(省略記法): {time_only}")
print(f"年(省略記法): {year_only}")
実行結果:
時刻(省略記法): 14:30
年(省略記法): 2025
まとめ
text[i]: インデックスiの文字を取得します(0から開始)。text[-1]: 末尾の文字を取得します。text[start:end]:startからendの手前までの文字列を取得します。- 終了インデックスは「含まれない」という点に注意が必要です。
