【Python入門】文字列抽出【インデックス・スライス・正規表現】

Python

文字列の抽出で悩んでいる人「郵便番号「123-4567」から最初の3文字だけを抽出したり、「私は50才です」から「50」だけを抽出したいけどできない…」

こういった疑問に答えます。

本記事でわかること

  • 文字列を抽出する3つの方法
  • インデックスの使い方
  • スライスの使い方(右側から抽出する方法も紹介)
  • 正規表現の使い方(数字だけを抽出)

  

【Python入門】文字列抽出【インデックス・スライス・正規表現】

 

Pythonでは文字列を抽出する方法がたくさんあります。今回はこの3つを学んでおけばほぼ全ての状況に対応できるというものをピックアップしました。

 

文字列の抽出とは?

今回学ぶものは文字列の中の位置を指定して文字を抽出する方法と文字列の中の数値だけや英字だけなどを指定して文字を抽出する方法です。

イメージ図

イメージ図を文字に起こすと概要はこんな感じになります。

  • インデックス→特定の位置だけを指定して抽出
  • スライス→始めと終わりを指定し、その間を抽出
  • 正規表現→数字を指定して抽出

 

インデックスの使い方

[]の中に数字を指定することで指定した位置の文字を抽出できます。

moji = 'aiueo'

print(moji[0])
# a

print(moji[3])
# e

注意すべきこととして、数字は0から始まるため1文字目を指定したいときは[0]とする必要があります。

 

「例えば[-1]のように負の数字を指定するとどうなるの?」

負の数字を使うと後ろからの位置を指定することになります。

moji = 'aiueo'

print(moji[-1])
# o

print(moji[-3])
# u

「もし、文字数と同じかそれ以上の数字を使うとどうなるの?」

存在しない数字をつかうとエラーになります。

moji = 'aiueo'

print(moji[10])
# IndexError: string index out of range

print(moji[-100])
# IndexError: string index out of range

 

指定する数字のまとめ

 a  i  u  e  o
 0  1  2  3  4 正の数字
-5 -4 -3 -2 -1 負の数字

 

スライスの使い方

[ : ]の中に、抽出したい文字の開始位置と終了位置を[開始位置:終了位置]となるように指定します。ただし終了位置の1つ前の文字までしか抽出されないことに気をつけましょう。

moji = 'aiueo'

print(moji[1:3])
# iu

print(moji[2:4])
# ue

 

[開始位置:終了位置]において開始位置を省略すると文字列の先頭から、終了位置を省略すると文字列の最後まで抽出されます。

moji = 'aiueo'

print(moji[:3])
# aiu

print(moji[2:])
# ueo

「スライスでも[-4:-1]のように負の数字を使えるの?」

こういった疑問に答えます。

負の数字も使えます。使い方は先ほど紹介したインデックスと全く同じです。 

moji = 'aiueo'

print(moji[-4:-1])
# iue

print(moji[-5:-3])
# ai

print(moji[-3:])
# ueo

print(moji[:-1])
# aiue

 

正の数字と負の数字を同時に使うことができます。

moji = 'aiueo'

print(moji[0:-1])
# aiue

print(moji[-5:3])
# aiu

 

存在しない数字を指定してもエラーにはなりません。指定した数字の範囲内に文字がない場合は空文字が返ってきます。

moji = 'aiueo'

print(moji[0:10])
# aiue

print(moji[10:])
# 

print(moji[:10])
# aiueo

print(moji[-10:-1])
# aiue

print(moji[-10:])
# aiueo

print(moji[:-10])
# 

 

開始位置から終了位置にある文字を飛び飛びに抽出することも可能です。[開始位置:終了位置:増分]と記述します。

moji = 'aiueo'

print(moji[0:5:1])
# aiueo

print(moji[0:5:2])
# auo

print(moji[0:5:3])
# ae

print(moji[:5:2])
# auo

print(moji[0::2])
# auo

 

増分に負の数字を使用すると後ろから順番に抽出されます。

moji = 'aiueo'

print(moji[::-1])
# oeuia

print(moji[::-2])
# oua

print(moji[::-3])
# oi

 

正規表現の使い方

正規表現ではどんな文字列を抽出するかを指定します。インデックスやスライスと違い位置を指定することはありません。例えば’私は50才です’という文字列から’50’を抽出するとき、スライスでは位置を指定しますが正規表現では数値を指定するこで’50’を探し出します。

 

正規表現を利用するといはas.reserch( , )を使用します。

as.reserch(抽出する文字列の性質,抽出される文字列)

ex
as.reserch(数字,抽出される文字列)
as.reserch(2文字以上の数字,抽出される文字列)
as.reserch(アルファベット,抽出される文字列)
as.reserch(カタカナ,抽出される文字列)

 

2文字以上の数字を抽出するときはこのように記述します。

import re

moji = 'aiueo12345'

print(re.search(r'\d+', moji))
# <_sre.SRE_Match object; span=(5, 10), match='12345'>

‘import re’は1行目に必ず記述してください。初心者の方は’import re’のことを今から’re.reserch()’を使いますという意味だと解釈してください。

‘\d’は数字を表し、’+’は’\d’が複数回繰り返すことを意味しています。したがって’\d+’は複数の連続した数字を表しています。つまり2文字以上の数字を指定したい時は’\d+’を記述することで可能になります。

他にもアルファベットやカタカナなどを指定して抽出する方法もあります。それらの方法について知りたい方はこちらの記事を参考にしてください。この記事をみれば、正規表現を用いた文字列の抽出はマスターでき、いろんな場面で適切な文字列を抽出することができるようになります。

まとめ

いかがでしたか?本記事では文字列の抽出の方法3つについて紹介しました。

 

文字列を抽出する3つの方法

  • インデックス
  • スライス
  • 正規表現

 

その時に応じて適切な物を使用してみてください。今回の記事は以上になります。