[Python] 文字列を抽出する方法いろいろ

Pythonで文字列から特定の文字を抽出する処理をいつもググってたので、ググらなくても良いように代表的な方法をいくつかメモしておきます。

前提条件

  • Python:3.9.1

文字列の位置を指定して抽出する方法

インデックスを指定して文字を抽出

char = 'abcdefghij'

# インデックスは0から始まる
print(char[3])

# 4文字目が抽出される
# d

インデックスに負の数を使用すると後ろからの位置を指定して文字列を抽出できる

char = 'abcdefghij'

print(char[-1])

# -1が一番最後の文字
# j

print(char[-4])
# g

存在しないインデックスを指定すると「IndexError」になります。

print(char[10])

IndexError: string index out of range

スライス[start:end]を指定して抽出する方法

スライスを使用することで2文字以上の文字列も抽出することができる。startendのインデックス間の文字列を抽出できる。

char = 'abcdefghij'

print(char[2:5])
# cde

# startを省略すると先頭から抽出する
print(char[:3])
# abc

# endを省略すると末尾まで抽出する
print(char[3:])
# defghij

もちろん、負の数も使用可能です。

char = 'abcdefghij'

print(char[-5:-2])

# fgh

startの方がendの値より大きい数値を指定「start > end」するとエラーではなく空文字が返却されます。また、存在しない範囲を指定「[-1000:1000]など」を指定してもエラーにならず、範囲内の値のみ返却されます。

print(char[-1000:1000])

# abcdefghij

エラーを出したくない場合はインデックスを指定する方法ではなく、スライス[start:end]を使用した方が良いかもしれないですね。

スライス[start:end]にstep(増分)も指定することもできます。[start:stop:step]のように指定します。これにより、文字列をstepの数値分飛び飛びで抽出することができます。

char = 'abcdefghij'

print(char[1:6:2])
# bdf

print(char[1:6:3])
# be

stepには負の値も指定可能です。その場合、後ろから順番に抽出されます。

print(char[::-1])
# jihgfedcba

print(char[::-3])
# jgda

覚えておきたいポイント

抽出対象の文字数を利用して文字列を抽出することもできる。

char = 'abcdefghij'

print(char[len(char) -1])

# 文字列の末尾が抽出される
# j

日本語(全角文字)も半角文字も1文字としてカウントされます。

s = 'abcあいう'

print(len(s))
# 6

print(s[1:5])
# bcあい

その他の抽出方法について

正規表現を利用した文字列の抽出を行うことができます。これにより、より柔軟な文字列の抽出が可能となります。

標準ライブラリの「reモジュール」を使用します。以下簡単に概要のみ記載しておきます。

re.search()

正規表現のパターンにマッチする文字列を抽出することができます。

re.search()メソッドはマッチオブジェクトを返却します。マッチオブジェクトのgroup()メソッドを使用するとマッチした部分を文字列として取得できます。

re.findall()

正規表現のパターンにマッチする文字列をリストとして返却します。

最後に

Pythonの文字列の抽出方法をいつもググっていたんですが、ここにメモしておくことでこれからはググらなくても済みそうです。

コメントする

メールアドレスが公開されることはありません。