Python – 文字列 その1
2009年12月2日 2:29 AM by Abalone




Python で行う仕事には文字列処理もかなり多いと思う。
ので、文字列について復習しようかな、と。

まず、シングルクォートとダブルクォート。

Pythonではシングルクォート、ダブルクォートのどちらを使っても文字列を記述可能。
トリプルクォートも使用は可能。トリプルクォート使うとどうなるかは以前書いたのでそちらを参照して欲しい。私も読み返した。

例えば次のようなコードを実行してみる。


#!/usr/bin/python

print 'Python string 1'
print "Python string 2"

実行結果は次のようになる。


$ ./str_1.py
Python string 1
Python string 2

シングルクォートでもダブルクォートでも出力結果は同じになる。次にpythonをシェル上で実行して、二通りの文字列を入力してみる。


$ python
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> "string"
'string'
>>> 'string'
'string'
>>>

と、こんな感じで、結果的に同じものに評価されている。シングルクォートを使っても、ダブルクォートを使っても内部的にも同じと考えてよいのではないだろうか。では、どう使い分ければいいかというと、シングルクォート、ダブルクォート自体を文字列に含めたい時にそれぞれを使う。


>>> "Single'quotation"
"Single'quotation"
>>> 'Single'quotation'
  File "", line 1
    'Single'quotation'
                    ^
SyntaxError: invalid syntax

この例は、どちらもシングルクォートを含んだ文字列を使用したものだが、一つ目はダブルクォートで囲ったもの(“Single’quotation”)、二つ目はシングルクォートで囲ったもの(‘Single’quotation’)を実行してみたものである。
ダブルクォートで囲った方は、”Single’quotation”と評価結果が出ているが、シングルクォートで囲った方はSyntaxErrorとなっている。すでにみなさんお分かりとは思うが、文字列Single’quotationの中に含まれているシングルクォートが、文字列を囲っているシングルクォートの終了と判断されてしまうためである。こういう場合には、ダブルクォートで囲む。


では、シングルクォートとダブルクォートの両方が含まれているときにはどうすればよいか試してみたい。

ab’cd”ef’gh”ij

この文字列をどうやったらPythonで正しく認識されるように書けるかやってみる。


(1) '''ab'cd"ef'gh"ij'''
(2) """ab'cd"ef'gh"ij"""
(3) 'ab\'cd"ef\'gh"ij'
(4) "ab'cd" '"ef' "'gh" '"ij'

とりあえず思いついたのは、この4通り。(1)と(2)はトリプルクォートを使う方法。シングルクォートとダブルクォートが入り交じっているならトリプルクォートを使えばいいと。
(3)は、エスケープシーケンスを利用する方法。バックスラッシュをシングルクォート、ダブルクォートの前に書いておくと、単なる文字列として扱われるので、あとはシングルクォート(あるいはダブルクォート)で囲んでおけばOK。

(4)がトリッキーだが、重要なやつ。Pythonでは、文字列を空白で区切って並べておくと連結されるので、これでも同じことになる。実際にそれぞれを入力してみると、同じ結果が得られる。


>>> '''ab'cd"ef'gh"ij'''
'ab\'cd"ef\'gh"ij'
>>> """ab'cd"ef'gh"ij"""
'ab\'cd"ef\'gh"ij'
>>> 'ab\'cd"ef\'gh"ij'
'ab\'cd"ef\'gh"ij'
>>> "ab'cd" '"ef' "'gh" '"ij'
'ab\'cd"ef\'gh"ij'

すべてシングルクォートを使い、ダブルクォートをバックスラッシュでエスケープした文字列になっている。

続きます。





トラックバックURL


この記事に対するコメント/トラックバックはまだありません


コメントをどうぞ

お名前(必須)
Eメールアドレス(公開されません)(必須)