とある変数に「A0123-456」っていう文字列が入っているんだけど、
ハイフン(-)より前(A0123)を抽出したい…。
Pythonでもそんなことが出来るの?
できますよ!
では今回は、「Pythonで変数から文字列を抽出する方法」を
できるだけわかりやすく解説いたします。
「先頭から」「後ろから」「○文字目以降」など、
さまざまな指定方法を紹介いたしますので、
ぜひ最後まで読んでいってください。
Pythonで変数から文字列を抽出する方法
早速ですが、変数strの中に、「あいうえお-かきくけこ-さしすせそ」という文字列が入っています。
str ='あいうえお-かきくけこ-さしすせそ'
位置や特定の文字を基準に文字列を抽出してみましょう。
変数については下記記事をご参考ください。
下記のとおり、6つのパターンを解説いたします。
(クリックで知りたい見出しにジャンプ)
- 特定の位置以降の数文字を抽出(2文字目以降の「いうえ」)
- 特定の文字以降の数文字を抽出(「か」以降の「かきく」)
- 先頭から数文字を抽出(あいう)
- 後ろから数文字を抽出(すせそ)
- 特定の文字までを抽出(「お」までの「あいうえお」)
- 特定の文字で囲まれた部分を抽出(「-」で囲まれた「かきくけこ」)
※解説はわかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
特定の位置以降の数文字を抽出
変数str(あいうえお-かきくけこ-さしすせそ)について、
2文字目から3文字分を抽出してみましょう。
いわゆる「スライス」です。
str ='あいうえお-かきくけこ-さしすせそ'
chars = str[1:4]
print(chars)
<実行結果>
いうえ
【コード2行目の解説】
[]内には、「開始する文字の位置」、「:(コロン)」、「終了する文字の位置」の順で記述します。
位置については間違えやすいのですが、
「0」なら1文字目、「1」なら2文字目という具合で、1文字ずつズレています。
例では[1:4]なので、「2文字目」が開始する文字の位置となります。
またまた間違えやすいのですが、「終了する文字の位置」は指定の文字を含みません。
つまり「4」なら、5文字目を含まない4文字目までとなります。
<テンプレ>
【 抽出後の変数 = 元の変数[開始する文字の位置:終了する文字の位置] 】
開始位置は○文字目-1、終了位置は○文字目そのままと覚えてください。
特定の文字以降の数文字を抽出
変数str(あいうえお-かきくけこ-さしすせそ)について、
「か」以降の3文字分を抽出してみましょう。
str ='あいうえお-かきくけこ-さしすせそ'
start_index = str.index('か')
chars = str[start_index:start_index + 3]
print(chars)
<実行結果>
かきく
【コード2行目の解説】
「か」が何文字目にあるかを特定しています。
「か」が2つ以上ある場合は、最初に出てきた方を認識します。
右辺に、文字列が入った変数に続けて「.index()」を書きます。
()内に基準とする文字を記述してください。
これで変数「start_index」には「か」の文字位置である「6」が代入されました。
※「あ」は0(1文字目)、「い」は1(2文字目)、・・・「か」は6(7文字目)という数え方なのでご注意ください。
【コード3行目の解説】
前項の「特定の位置以降の数文字を抽出」と同じです。
chars = str[6:9]となり、7文字目から9文字目までを抽出する結果となります。
<テンプレ>
【 開始する文字が入った変数 = 元の変数.index(‘開始する文字’) 】
【 抽出後の変数 = 元の変数[開始する文字が入った変数:開始する文字が入った変数 + 文字数] 】
先頭から数文字を抽出
変数str(あいうえお-かきくけこ-さしすせそ)について、
先頭から3文字分(あいう)を抽出してみましょう。
str ='あいうえお-かきくけこ-さしすせそ'
chars = str[:3]
print(chars)
<実行結果>
あいう
「特定の位置以降の数文字を抽出」の項で、[]内の指定について解説いたしました。
【 抽出後の変数 = 元の変数[開始する文字の位置:終了する文字の位置] 】
その流れでいけば[0:3]なのですが、先頭が0(つまり1文字目)だった場合は、記述を省略できます。
なので0を省略して[:3]と記述しても、先頭から3文字分を抽出することが可能です。
<テンプレ>
【 抽出後の変数 = 元の変数[:先頭から抽出したい文字数] 】
末尾の3文字を除いた文字列を抽出したい場合は、2行目を下記のように記述してください。
chars = str[:-3]
<実行結果>
あいうえお-かきくけこ-さし
後ろから数文字を抽出
変数str(あいうえお-かきくけこ-さしすせそ)について、
後ろから3文字分(すせそ)を抽出してみましょう。
str ='あいうえお-かきくけこ-さしすせそ'
chars = str[-3:]
print(chars)
<実行結果>
すせそ
[]内にコロン(:)を書いたら、コロンの前に抽出したい文字数を記述します。
後ろから3文字を抽出するため、「-3」と記述してください。
前項までの「開始位置」「終了位置」「省略」など理屈はたくさんあるのですが、
上記のように解釈するのが一番覚えやすいと思います。
<テンプレ>
【 抽出後の変数 = 元の変数[-後ろから抽出したい文字数:] 】
先頭の3文字を除いた文字列を抽出したい場合は、2行目を下記のように記述してください。
chars = str[3:]
<実行結果>
えお-かきくけこ-さしすせそ
特定の文字までを抽出
変数str(あいうえお-かきくけこ-さしすせそ)について、
先頭から「お」までの部分(あいうえお)を抽出してみましょう。
str ='あいうえお-かきくけこ-さしすせそ'
end_index = str.index('お')
chars = str[:end_index + 1]
print(chars)
<実行結果>
あいうえお
【コード2行目の解説】
「特定の文字以降の数文字を抽出」の時と同様です。
「お」が何文字目なのかを特定しています。
【コード3行目の解説】
こちらも「特定の文字以降の数文字を抽出」の時と同様です。
[]内は、[0:5]となり、先頭から5文字目までを抽出できます。
コロンの前が「0」ではなく空白なのは、「先頭から数文字を抽出」の時のように「0」は省略できるからです。
<テンプレ>
【 終了する文字が入った変数 = 元の変数.index(‘終了する文字’) 】
【 抽出後の変数 = 元の変数[:終了する文字が入った変数 + 1] 】
特定の文字で囲まれた部分を抽出
変数str(あいうえお-かきくけこ-さしすせそ)について、
ハイフン(-)で囲まれた部分(かきくけこ)を抽出してみましょう。
str = 'あいうえお-かきくけこ-さしすせそ'
first_hyphen_index = str.index('-')
last_hyphen_index = str.rindex('-')
chars = str[first_hyphen_index + 1:last_hyphen_index]
print(chars)
<実行結果>
かきくけこ
【コード2行目の解説】
「特定の文字以降の数文字を抽出」の時と同様です。
最初の「-」が何文字目なのかを特定しています。
【コード3行目の解説】
2行目では、最初に出てきた「-」が何文字目なのかを特定しました。
今度の「rindex」は最後に出てきた「-」を認識し、位置を特定します。
これで最初と最後の「-」の位置が特定できました。
【コード4行目の解説】
あとはこれまでと同じです。
最初の「-」から最後の「-」までの文字を抽出します。
str[first_hyphen_index+1:last_hyphen_index] は [6:11]となり、「-」で囲まれた「7文字目~11文字目まで」を抽出できます。
<テンプレ>
【 最初の指定文字が入った変数 = 元の変数.index(‘指定文字’) 】
【 最後の指定文字が入った変数 = 元の変数.rindex(‘指定文字’) 】
【 抽出後の変数 = 元の変数[最初の指定文字が入った変数 +1:最後の指定文字が入った変数] 】
「-」が3つ以上あると、下記のようになりますのでご注意ください。
str = 'あいうえお-かきくけこ-さしすせそ-たちつてと'
<実行結果>
かきくけこ-さしすせそ
この場合は、最後の「-」以降を削除してから、「-」で囲まれた部分を抽出しましょう。
str = 'あいうえお-かきくけこ-さしすせそ-たちつてと'
last_hyphen_index = str.rindex('-')
str2 = str[:last_hyphen_index]
first_hyphen_index = str2.index('-')
middle_hyphen_index = str2.rindex('-')
chars = str2[first_hyphen_index + 1:middle_hyphen_index]
print(chars)
<実行結果>
かきくけこ
うまく動作しない時の対処法
エラーが出る
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
Pythonで変数から文字列を抽出する方法を解説いたしました。
間違いやすいところをおさらいしてみましょう。
- []内の「0」は1文字目、「1」は2文字目のこと(1つずつズレるので注意)
- []内の終了位置を指定する数字は、その文字を含まない(「5」なら4(5文字目)で終了)
どうだったっけ?と不安になった場合は、また見に来てください。
当ブログでは、xlwingsやopenpyxlなど、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!