/var/log/masayoshi/masayoshi.life.log

とりあえず、書きたいこと書くだけ。

特定の位置から数文字分取り出したい



また、「str[]」が登場しますよ。


今回は違った使い方をするんでメモの用意を!!




0.前回の復習



# coding:EUC-JP

sea = "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
Season 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 うれしー)


でもよかった気がするのは気のせい?