java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

Python | 文字列から一部分を取り出す

投稿日:

最終更新日:2022年10月29日

アイキャッチ

こんにちは。今回はPythonについての記事です。

今回学習した内容は、文字列から一部分を取り出すときの記述の仕方です。

この記事では年月日8桁が文字列として与えらているときに、年、月、日を取り出すということをしました。

指定の位置の一文字取り出す

文字列の中から指定の位置の一文字を取り出したい場合、鍵括弧を使って次のように記述できます。

1文字取り出す例1

date_str = '19870425'

print(date_str[0])
print(date_str[1])
print(date_str[2])
print(date_str[3])
print(date_str[4])
print(date_str[5])
print(date_str[6])
print(date_str[7])

print("---------------")
print(date_str[-1])
print(date_str[-2])

結果

1
9
8
7
0
4
2
5
---------------
5
2

上記サンプルのように、変数名[インデックス]という書き方で、文字列から一文字取り出すことができます。インデックスは文字列の先頭の一文字が0に対応します。

文字の位置とインデックスの対応関係の図

上記サンプルでは先頭から一文字ずつ取り出して、出力しています。なお、インデックスには負の数を使うことができます。末尾の位置から-1, -2,…です。なので、変数[-1]という書き方で、文字列の最後の文字を取り出せます。変数[-2]で、最後から2番目の位置の文字を取り出せます。

インデックスには以下のように、変数を使うことができます。

1文字取り出す例2

date_str = '19870425'

index = 3
print(date_str[index])

結果

7

注意としては、文字列の長さに対して、インデックスが範囲を超えてしまうとエラーになる点です。例えば、上記サンプルでは変数date_strに格納されたは文字列は8文字です。そのためインデックスの0以上の値の範囲は0~7です。例えば、index = 8と記述すると、次のエラーが発生します。

IndexError: string index out of range

また、インデックスの負の数の範囲は-1から-8までです。index = -9と記述すると上記エラーが発生します。

まとめると、上記サンプルでのインデックスの範囲は以下の通りです。

  • 0以上の範囲は0から「[文字列の長さ] – 1」まで。
  • 負の数は-1から「-[文字列の長さ]」まで。

体験談としては、繰り返し処理などで変数を使った場合、上記エラーが発生しやすいです。インデックスの値の範囲に注意が必要です。

年月日8桁の年、月、日の部分をそれぞれ取り出す

インデックスの範囲を指定する記述の仕方があり、これを使うと文字列の一部分を取り出すことができます。

例えば、年月日8桁で構成される文字列「19870425」の年、月、日を取り出すには以下のように記述します。

一部分を取り出す例

date_str = '19870425'

print('----------------')
print('(1-1)最初から2番目まで取り出す書き方1')
print(date_str[0:2])
print('(1-2)最初から2番目まで取り出す書き方1')
print(date_str[:2])

print('----------------')
print('(2)途中の一部分を取り出す書き方')
print(date_str[4:6])
print('----------------')
print('(3-1)途中から最後まで取り出す書き方1')
print(date_str[6:8])
print('(3-2)途中から最後まで取り出す書き方2')
print(date_str[6:])

結果

----------------
(1-1)最初から2番目まで取り出す書き方1
19
(1-2)最初から2番目まで取り出す書き方1
19
----------------
(2)途中の一部分を取り出す書き方
04
----------------
(3-1)途中から最後まで取り出す書き方1
25
(3-2)途中から最後まで取り出す書き方2
25

上記サンプルの(1-1)と(1-2)では年の部分を、(2)では月の部分を、(3-1)と(3-2)では日の部分を取り出しています。

このサンプルのように、文字列の一部分を取り出すには「変数[a:b]」という記述をします。この処理をスライスと言います。[a:b]が表すインデックスの範囲はaからb-1です。

(1-1)では[0:2]という指定をしています。この指定で、インデックスの範囲は0から1となります。スライスの指定ではインデックス0は省略できます。そのため、[0:2]は[:2]と記述できます。そのため、(1-1)と(1-2)は同じ結果になります。

(2)では月の部分を取り出しています。[4:6]と記述しているので、インデックスの範囲は4、5です。

(3-1)では日の部分を取り出しています。ここでは、[a:b]のbに最後のインデックスを指定しています。スライスの指定では最後のインデックスは省略することができ、[a:]という記述ができます。そのため、(3-1)と(3-2)では同じ結果になります。

このように、「変数[a:b]」という指定で、文字列の一部分を取り出すことができます。

なお、スライスの指定でも負の数のインデックスを使うことができます。以下では、年と日の部分を負の数で取り出しています。

スライスで負のインデックスを使った例

date_str = '19870425'

print('----------------')
print(date_str[:2])
print(date_str[:-6])
print('----------------')
print(date_str[6:])
print(date_str[-2:])

結果

----------------
19
19
----------------
25
25

[:-6]という指定ではインデックスは0から-7です。今回は8桁の文字列なので、インデックス「-7」はインデックス「1」と同じ位置を示します。そのため、先頭の2桁が取り出されます。

[-2:]という指定ではインデックスは-2から最後までです。今回は8桁の文字列なので、インデックス「-2」はインデックス「6」と同じ位置を示します。そのため、最後の2桁が取り出されます。

以上、参考になれば幸いです。