ユーニックス総合研究所

  • home
  • archives
  • python-bubun-mojiretsu

Pythonで部分文字列を切り取る方法【スライス、正規表現】

  • 作成日: 2023-06-27
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonで部分文字列を切り取る

この記事ではPythonで部分文字列を切り取って取得する方法を解説します。
紹介する方法は

  • スライスによる部分文字列の取得
  • 正規表現による部分文字列の取得

になります。

関連記事
Djangoでオブジェクトを一括作成・更新【bulk_create, bulk_update】
DjangoのModel.objects.filter()の使い方【QuerySet】
Djangoのmodelのcreate()の使い方【Python】
Django入門: ルートの設定 ~ 簡単な一行掲示板アプリを作る その4【Windows10】
NumPyのappend()の使い方: 配列の末尾に要素を追加
Numpyのarangeの使い方: 指定範囲の数列を生成する
Python3でYoutube Data APIを使ってキーワード検索する
PythonからC言語(my.puts)を呼び出して実行する

スライスによる部分文字列の取得

Pythonの文字列やリストには「スライス」と呼ばれる機能があります。
これはインデックスを指定して文字列などの一定範囲の要素を取得する操作です。
これを使うとPythonで文字列から部分文字列を取得できます。

スライスの構造

スライスの構造は以下になります。

文字列[開始点:終了点:ステップ数]  

たとえば文字列で開始点と終了点を指定したスライスは以下のようになります。

s = 'Hello, World!'  
print(s[7:12])  
# World!  

上記の場合は開始点が7です。終了点が13になってます。
これは要素7から要素13までの範囲をスライスして切り取るということになります。
Hello, World!の7番目の要素はWで13番目の要素は文字列終端になります。
ですのでWorld!の部分がスライスされます。

開始点の指定

開始点にはスライスを始めるインデックスを指定します。
終了点を省略した場合は開始点から文字列末尾までスライスされます。

s = 'Hello, World!'  
print(s[7:])  
# World!  

開始点をマイナスにした場合は文字列末尾からマイナス方向のインデックスになります。

s = 'Hello, World!'  
print(s[-6:])  
# World!  

終了点の指定

終了点にはスライスを終了するインデックスを指定します。
開始点を省略した場合は文字列先頭から終了点までの範囲をスライスします。

s = 'Hello, World!'  
print(s[:5])  
# Hello  

終了点をマイナスにしたら文字列末尾からマイナス方向のインデックスになります。
以下は文字列末尾から-8の終了点を指定しているところです。

s = 'Hello, World!'  
print(s[:-8])  
# Hello  

ステップ数の指定

ステップ数を指定したサンプルは以下になります。

s = 'Hello, World!'  
print(s[7:13:2])  
# Wrd  

デフォルトのステップ数は1です。上記では2を指定しています。
ステップ数が1の時はWorld!が取得されましたが、ステップ数が2の時はWrdのようにスライスされます。
これは

012345  
World!  

と見たとき、ステップ数2では

0 2 4  
World!  

の部分の要素が取得されるからです。

正規表現による部分文字列の取得

re.search()を使うと正規表現で部分文字列を取得できます。

import re  

s = 'Hello, World!'  

m = re.search(r'H.+,', s)  
print(m.group())  

m = re.search(r'W.+!', s)  
print(m.group())  

以下のコードですが、

m = re.search(r'H.+,', s)  
print(m.group())  

正規表現は「r'H.+,」です。
これは「Hではじまり1つ以上の文字の繰り返しで,で終わる」部分文字列にマッチします。
この条件でマッチするのはHello, World!Hello,の部分です。

以下のコードですが、

m = re.search(r'W.+!', s)  
print(m.group())  

正規表現は「r'W.+!」です。
これは「Wではじまり1つ以上の文字の繰り返しで!で終わる」部分文字列にマッチします。
この条件でマッチするのはHello, World!World!の部分です。

おわりに

今回はPythonで部分文字列を取得する方法を解説しました。
なにか参考になれば幸いです。