特定の位置から数文字分取り出したい
また、「str[]」が登場しますよ。
今回は違った使い方をするんでメモの用意を!!
0.前回の復習
# coding:EUC-JPsea = "season 8"
print sea[0]
print sea[1]
print sea[2]
print sea[3]
print sea[4]
print sea[5]
print sea[6]
aibou = unicode("相棒","EUC-JP")
print aibou[0]
print aibou[1]
前回は特定の位置から1文字を取り出しました、これも今回のスライスが関係してきますよ。
文字の数え方は?
そう0から数えるね、とりあえず次の表を見てもらおう
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||||||||
S | e | a | s | o | n | 8 |
これはさっきの復習に出てきた「Season 8」だね、違うのは「*」という文字が間に入ってきてるね。
これがポイントなんだ、この「*」は「文字の間」なんだ。
数えるときはどうするかって?
それはこの「文字の間」を基準にする、さっきの
print sea[0]
を例にしてみようか、これはseaという変数の文字列の0番目から1番目の間にある1文字を取り出すという意味だよ。
取り出す対象は0から1の間にある文字列なんだ
0 | - | 1 |
s |
上の表の0から1の間の「-」の下にある文字列は何だい?
「S」だよ、だから「S」が取り出せるんだ。
基本的には「文字数を基準」に考えてね、文字の間は時折思い出す程度にね
1.半角英数字の場合
# coding:EUC-JP#半角英数字
sui_dou = "How Do You Like Wedness Day?"print sui_dou[16:23]
半角文字の場合はそのまま数える、今回だと「16字目から23字目までの文字列」を取り出してるね
取り出した文字列は「Wedness」、どっかから「Day?」もつけろと突っ込みがありそうですが気にしないでください。
逆バージョンもありますよー
# coding:EUC-JP#半角英数字
sui_dou = "How Do You Like Wedness Day?"print sui_dou[16:-5]
この場合は最初の文字の位置を指定した後、後ろから文字列を数え始めて-5番目の位置までの文字列を取り出します。
この文字列は全部で「28文字」あります、これから5引いてください。
計算したら23が出ますね、前のパターンでは16文字目から何文字目までを取り出そうとしましたか?
はい23文字目ですね
- [16:23]は16文字目から23文字目の間を取り出す
- [16:-5]は16文字目から全体の文字数から-5した文字目の間の文字列を取り出す。
もちろん0から文字数は数えますよ、念のため
2.全角だとどうするの?
半角と同じようにやると手間がかかるのでUnicode文字列化してやりましょう、これで文字数単位で扱えるようになります。
半角と全角文字が入り混じった場合だとUnicode化しちゃうんですがね
# coding:EUC-JP
rachi = unicode("藤村がバカだぁ","EUC-JP")
print rachi[3:5]
print rachi[3:-2]
これもさっきと同じですね、5文字目と7文字目の間の文字列を取り出してます。
まぁ「バカ」はどうでしょうではしょっちゅう出てくる定番なんですがね、まとまったころに
「しかでしたぁ」(by うれしー)
でもよかった気がするのは気のせい?