はじめに

数値の計算はマスターしましたか?
プログラミングでは、数値計算と並んで文字列操作も多用されます。
数値計算は算数に近いものですから理解しやすいですが、文字列操作はあまり一般的ではないためイメージがつかみにくいかもしれません。
とはいえ、難しいものではないのでひとつずつ理解していきましょう。
この記事では、Python初心者の方向けに、Pythonでの文字列操作について説明していきます。
文字列の概念や関連する知識もまとめて覚えておきましょう。

文字列のおさらい

Pythonで文字列を扱う場合には「str型」を使います。
strはstring(文字列)の略なので、合わせて覚えておきましょう。
str型は組み込みデータ型であり、ソースコードに直接リテラルとして記述できます。
それではまず、文字列リテラルの書き方についてみていきましょう。

文字列リテラルの書き方

文字列をソースコード中に記述する際には、そのまま文字列を記述するだけでは不十分です。
なぜなら文字列とプログラムの区別がつかなくなってしまうからです。
そのため、文字列リテラルはダブルクオーテーション(”)もしくはシングルクォーテーション(’)で囲います。
たとえば、次のような形です。
例:”hogehoge” もしくは ‘fugafuga’
どちらを使って記述しても結果は同じです。
どちらかに決めて統一して使うようにしましょう。
注意しなければならないのは、文字列中にダブルクオーテーションやシングルクォーテーションを記述する場合です。そのまま記述すると文字列の終わりとして認識されてしまうため、バックスラッシュ(フォントによっては円マーク)をつけてエスケープ処理しなければいけません。
例:”hoge\”hoge” もしくは ‘fuga\’fuga’
なお、バックスラッシュ(円マーク)自体もエスケープ処理する必要があります。

文字と文字列について

文字列の操作を始める前に、文字列の概念について理解しておきましょう。
文字列は連続した文字の集まりです。
この文のように、ひとつひとつの文字の並びが文字列を構成しています。
そのため、文字列は一種のシーケンスであり、配列のようなものと考えることができます。
たとえば、文字列から特定の文字を取り出すには、次のようにします。
例:”abc”[1]

例の結果は”b”となります。

カッコ内のインデックス番号が0から始まることに注意しましょう。
0なら”a”、2なら”c”になります。
文字列長よりも大きいインデックス(例の場合は3以上)を指定するとエラーになりますので注意して下さい。
マイナスの値を指定すると、後ろからインデックスを指定できます。
先程の例でいえば、インデックス2と-1は等価であり、どちらも結果は”c”となります。
なお、ここでは文字列リテラルに対して直接インデックスを指定しましたが、一般的には変数に対して行います。
変数については後の連載で説明します。

文字列の基本的な操作

文字列長の取得

先程の文字列からの文字取得のように、事前に文字列長を知りたいことがあります。
その場合は、次のようにlen関数を使うと文字列長を取得できます。
例:len(“123456789”)

文字列のスライス

文字列から部分文字列(文字列の一部)を取得することもできます。
文字を取得する方法と似ていますが、こちらはインデックスの範囲を指定します。
例:”abcdefg”[2:5]

例の結果は”cde”になります。

左の開始インデックスが0から始まることと、右の終了インデックスの文字は結果に含まれないことに注意しましょう。

文字列の連結

文字列操作で最もよく使われるものは、おそらく複数の文字列の連結でしょう。
文字列の連結は、次のように非常に単純です。
例:”abc” + “def”

文字列の置換

文字列の置換処理も、よく使われるので覚えておきたい処理です。
1番目に指定した文字列を2番目に指定した文字列で置き換えます。
例:”abcdefg”.replace(“cde”, “hogehoge”)

文字列の分割

文字列を特定の文字で分割するには、次のようにします。
例:”ab,cd,ef”.split(“,”)
例ではカンマで文字列が分割され、それぞれの文字列が格納されたリスト(list型)が返ってきます。
区切り文字は含まれないことに注意しましょう。

まとめ

文字列の扱い方がお分かりになりましたか?
文字列操作はプログラムで必ずと言ってもいいほどよく使いますので、しっかり覚えておきましょう。
文字列は、文字が連続したシーケンスであることを忘れないで下さい。
また、文字列を出力するときは文字コードに注意しましょう。
出力先に適した文字コードでなければ文字化けを起こしてしまいます。
複数のエンコードを使い分けていきましょう。