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文字以上の文字列も抽出することができる。 start
〜 end
のインデックス間の文字列を抽出できる。
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
の文字列の抽出方法をいつもググっていたんですが、ここにメモしておくことでこれからはググらなくても済みそうです。
コメント