Pythonで文字列を抽出する・切り出す・抜き出す【範囲指定・スライス】

Pythonで文字列を抽出する・切り出す・抜き出す【範囲指定・スライス】 プログラミング

「20201001」という文字列から、年だけを抽出したい場合があります。
この場合、Pythonではどうするのでしょうか?

スライスを使います。
スライスチーズのスライスと覚えてください。

本記事の内容

  • Pythonにおけるスライス[]
  • 文字列の先頭から何文字だけ抜き出す
  • 文字列の末尾から何文字だけ抜き出す
  • 文字列の途中で何文字だけ抜き出す

それでは、上記を説明していきます。

Pythonにおけるスライス[]

スライスは、スライスチーズのスライスでしたね。
辞書的には、薄く切ることがその意味です。

同じように、文字列を薄く切る(切り出す)とイメージしましょう。
これで、Pythonにおけるスライスがイメージできたはずです。

では、Pythonのスライスについてもう少し話を進めます。
切り出すという以上は、範囲の指定が必要です。

どこからどこまで切り出すのか?という範囲の指定です。
その前に、スライスにおける範囲を確認しておきます。

+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

正のインデックスと負のインデックスが、存在します。
ここでは、正のインデッスクのみを確認します。
負のインデッスクに関しては、後ほど実践の際に出てきます。

「Python」は、6個の文字列で構成されています。
よって、0から6(文字数)までの範囲を指定できると覚えましょう。

プログラムなんて、習うより慣れろです。
実際の動きを確認した方が、理解は早いです。

moji = "Python"

print(moji[0:6])
print(moji[0:5])
print(moji[0:4])
print(moji[0:3])
print(moji[0:2])
print(moji[0:1])
print(moji[0:0])

上記コードの実行結果は、以下の通りです。

Python
Pytho
Pyth
Pyt
Py
P

簡単ですよね。
では、実践的な使い方を確認していきましょう。

ただし、今回は文字列の操作におけるスライスの説明です。
実は、スライスは文字列以外にも使うことができます。

でも、それをここで説明するとかえって理解を妨げることになります。
よって、本記事では文字列のスライスに絞って解説をしています。

文字列の先頭から何文字だけ抜き出す

「20201001」という文字列から、年だけを抽出したい場合があります。

冒頭で触れたことですね。
先頭から何文字だけ抜き出すというのは、プログラムでは本当によく行われます。

実際に年を抜き出してみます。

ymd_str = "20201001"

print(ymd_str[0:4])
print(ymd_str[:4])

このコードの実行結果は、以下。

2020
2020

勘の鋭い方は、もうわかりましたね。
0は省略可能です。

文字列の末尾から何文字だけ抜き出す

このパターンもよく見ますね。
例えば、「20201001」から日だけを抜き出したい場合です。

8文字の文字列から、末尾から2文字抜き出します。

ymd_str = "20201001"

print(ymd_str[6:8])
print(ymd_str[-2:8])
print(ymd_str[-2:])

このコードの実行結果は、以下。

01
01
01

さて、あなたはどのようにコーディングしますか?
私は、ymd_str[-2:]にします。

なお、末尾は省略可能です。
0が省略できたのと同じ考え方ですね。

じゃあ、両方とも省略したら?
やってみましょう。

ymd_str = "20201001"

print(ymd_str[:])

上記コードの実行結果です。

20201001

まあ、こうなりますよね。

文字列の途中で何文字だけ抜き出す

先頭・末尾からの抽出とくらべれば、このパターンはかなり頻度が減りますね。
と言うより、途中からの抽出であれば、スライスは使わないです。
正規表現で抜き出すパターンが多いでしょうね。

でも、折角なので確認しておきます。
じゃあ、「20201001」から月だけを抜き出したいとします。

ymd_str = "20201001"

print(ymd_str[4:6])

このコードの実行結果は、「10」です。

直感的にはコーディングしにくいですよね。
だから、実際には使うことはあまりないかもしれません。

タイトルとURLをコピーしました