Yamamoto's Laboratory
 
環境設定
 
プログラム作成
  書き方
 
 文字列
 
 
 
tkinter
 
 
 
 
 
 

文字列とは

Python では,文字列やはシングルクォートあるいはダブルクォートで囲むことで,文字列になります.演算子「*」と「+」をオーバーロードしていますので.次のような演算が可能です.

文字列の和と積 実行結果
#!/usr/bin/python3

a = 'abc-';
b = 'XYZ';

print(a+b);
print(3*a);
abc-XYZ
abc-abc-abc-

文字列のメソッド

文字列と数値の変換

文字列から数値へ

整数型

整数の文字列を整数の数値に変換する場合,関数「int("文字列", 基数)」を使います.基数の範囲は 0 &mdash 36 で,デフォルトは 10 です.

文字列を整数に変換するプログラム 実行結果
#!/usr/bin/python3

str_a = "1111"
str_b = "FF"

a02 = int(str_a, 2)
a08 = int(str_a, 8)
a10 = int(str_a)
a16 = int(str_a, 16)
b16 = int(str_b, 16)

print(a02, "\t", a08, "\t", a10, "\t", a16)
print(b16)
15 	 585 	 1111 	 4369
255

浮動小数点型

浮動小数点を表す文字列を浮動小数点の数値に変換する場合,関数「float("文字列")」を使います.

文字列を浮動小数点数に変換するプログラム 実行結果
#!/usr/bin/python3

str_a = "123"
str_b = "12345.6789"
str_c = "2.997e+8"
str_abc = str_a + str_b + str_c

a = float(str_a)
b = float(str_b)
c = float(str_c)
d = float("1.602176565e-19")

abc = a + b + c

print(str_abc)
print(a)
print(b)
print(c)
print(d)
print(abc)
12312345.67892.997e+8
123.0
12345.6789
299700000.0
1.602176565e-19
299712468.6789

複素数型

複素数を表す文字列を数値の複素数に変換するには,関数「complex("文字列")」を使います.

文字列を浮動小数点数に変換するプログラム 実行結果
#!/usr/bin/python3

str_a = "12.34+56.78j"
str_b = "11.11+22.22j"
str_abc = str_a + str_b

a = complex(str_a)
b = complex(str_b)
ab = a + b

print(str_abc)
print(a)
print(b)
print(ab)
12.34+56.78j11.11+22.22j
(12.34+56.78j)
(11.11+22.22j)
(23.45+79j)

数値から文字列へ

プレフィックス

文字列の前に,プレフィックス (f, r, u, b) を付けることで.文字列リテラルを変えることができます.f は format の意味で,中括弧{} の中の式を文字列に置換します.r は raw の意味で,文字列リテラルのスケープコードが無視されます.b は byte を表します.u は unicode を表します.b や u を使うことはないです.これらののプレフィックスは,大文字で動作します.

正規表現 (regular expression)

プログラムでは文字列をパターンで表現しなくてはならない場合があります.例えば,私のローマ字で書かれた私の名前,「Masashi Yamamoto」や「MASASHI YAMAMOTO」,「masashi yamamoto」を「山本昌志」と変換する場合です.このような場合,ローマ字で書かれた 3 つの表現を同じものとして取り扱わなくてはなりません.通常はの処理では文字列のパターンを調べ,対象の文字列(ここではローマ字で書かれた 3 つの名前)を抽出します.この文字列のパターンを表す表記方法が「正規表現 (regular expression)」です.これは文字列の置換の例ですが,この他にも (1)データの正当性のチェック,(2) 文字列の検索,(3) 文字列の分割のパターンにつ変わることが多いです.正規表現は大変便利なので,さまざまなプログラミング言語で使うことができます.

Python でも re モジュールを使うことで,正規表現を使った処理が可能です.ここでは,その具体的な方法を示します.

Python の表現

Python の正規表現の形式を以下の表に示します.

Python の re モジュールの正規表現
正規表現 文字列パターン
[abcXYZ] a,b,c,X,Y,Zのどれかひとつ*1
[a-z] a〜zのどれかひとつ*2
[C-W5-7] C〜W,あるいは5〜7のどれかひとつ
[^ab] 'a'と'b'以外にマッチ.ブラケット直後の ^ は否定*3
hoge | fuga hoge あるいは fuga のいずれか
. 改行文字(\n)以外の任意の1文字
\s\S \s は空白文字*4にマッチ.\Sはその否定.
\d\D \d は0〜9の数字にマッチ([0-9]と同じ).\D はその否定.
\w\W 英文字と英数字,下線([a-zA-Z0-9_])]にマッチ.\W はその否定.
\b\B \b は単語境界,\B は単語境界ではない.
^ 直後が文字列の先頭
$ 直前が文字列の末尾
* 直前の文字がゼロ個以上
+ 直前の文字が1個以上
? 直前の文字が0個または1個
最小の文字列にマッチ*5
{3,8} 直前の文字が3個以上,8個以下
{6} 直前の文字が6個
{7,} 直前の文字が7個以上
{,5} 直前の文字が5個以下
(パターン) 「\整数」で括弧内の文字列を参照できる*6
注意事項
  • *1 文字列クラスで文字列中の「]」にマッチさせる場合には,合には「\]」とエスケープします.
  • *2-」が先頭にある場合は,リテラルになり範囲指定の意味は失われます.文字列中の「-」を文字列クラスで表現する場合には「\-」とエスケープします.
  • *3^」が先頭にない場合は,リテラルになり否定の意味は失われます.文字列中の「^」を文字列クラスで表現する場合には「\^」とエスケープします.
  • *4 空白文字とは,「半角スペース, Tab(\t),改行(\n),リターン(\t),, 改ページ(\f),垂直タブ(\v)」のこと.
  • *5 不定個数文字の正規表現では,最も多くの文字列にマッチします.例えば「go+」とした場合,文字列「gooooool」の「goooooo」の部分にマッチします.最小の文字列にマッチさせたい場合には,「?」を付けます.「go+?」とすると「go」にマッチします.これが役に立つ例を示しましょう.「<span.+>」とした場合,文字列「<span class="hoge">」にはマッチしません.「.+」が「>」までマッチするからです.「<span.+?>」とすれば 文字列「<span class="hoge">」にマッチします.最小文字列にマッチは,「*?」, 「+?」, 「??」, 「{m, n}?」で使用可能.
  • *6 「xx\(.\)yy\([a-z]\)zz\2\1」は,「xx9yyazza9」や「xxByykzzkB」にマッチする.\1 は最初の括弧内の . に対応した文字列(ここでは文字),\2は次の括弧内の文字列になります.
  • 正規表現の特殊文字は,「.」や「^」,「$」,「*」,「+」,「?」と「{」,「}」と「[」,「]」と「\」,「|」,「(」,「)」です.通常,これらを文字として使う場合,エスケープ(文字の前に\をつける)しなくてはなりません.ただし,文字クラスを表す角括弧「[]」内に書くときは,以下の場合を除きそのまま書けます(エスケープ不要,リテラルでOK).文字クラスの場合「-」と「^」に示したように,エスケープが必要な場合があります.
  • 優先順位  演算子の優先順は,(1)括弧「()」,(2)繰り返しを表す「*,+,?,{3,8}」,(3)並び,位置指定,(4)または「|」です.

re モジュールによる文字列処理の方法

関数(メソッド)

正規表現モジュール(re)の関数(メソッド)の動作
設定 機能 戻り値
re.compile(pattern, flags=0) 正規表現パターンを正規表現オブジェクトにコンパイル コンパイルしたオブジェクト
re.search(pattern, string, flags=0) 文字列の任意の位置で,マッチするパターンを捜す. マッチ: マッチオブジェクト
マッチしない: None
re.match(pattern, string, flags=0) 文字列の先頭で,マッチするパターンを捜す. マッチ: マッチオブジェクト
マッチしない: None
re.split(pattern, string, maxsplit=0, flags=0) 文字列をパターンで,maxsplit での指定回数分割する.maxsplit=0 の場合には可能な限り分割する. 分割された文字列のリスト
re.findall(pattern, string, flags=0) 文字レス角全てのマッチパターンの検索 すべてのマッチを文字列のリスト
re.finditer(pattern, string, flags=0) マッチオブジェクトを生成するするイテレータの作成 イタレータ
re.sub(pattern, repl, string, flags=0) マッチしたパターンを文字列 repl で置換.cont(整数) は置換数の設定で,ゼロの場合は無制限. 置換された文字列
re.subn(pattern, repl, string, flags=0) マッチしたパターンを文字列 repl で置換.cont(整数) は置換数の設定で,ゼロの場合は無制限. タプル「(置換された文字列, 置換数)」
re.escape(string) 英数字以外をエスケープする. 文字列
re.purge() 正規表現のキャッシュをクリア

フラグ設定

複数のフラグを設定する場合には,「re.A|re.A」とします.

Python の正規表現モジュール(re)の設定
設定 内容
re.A   あるいは
re.ASCII
文字列が ASCII として,\b, \B, \x, \S, \w, \W を取り扱います.
re.I   あるいは
re.IGNORECASE
英文字の大文字/小文字を区別せずにマッチングを行います.文字クラス [A-Z] とした場合でも小文字にもマッチします.
re.M   あるいは
MULTILINE
^」は文字列の先頭と各行の直後にマッチ,「$」は文字列の末尾と各行の末尾にマッチします.デフォルトは,それぞれ文字列の先頭と末尾のみにマッチです.
re.S   あるいは
re.DOTALL
ドット「.」が改行も含めマッチします.
re.X   あるいは
re.VERBOSE
パターン内の空白の無視とコメントの導入により,パターンを読みやすくします.パターン内の空白を無視します.さらに,パターン内の文字「#」はコメント文の開始として取り扱います.そこから行末までの文字列を無視します.ただし,文字クラス内あるいはエスケープされた場合には,このフラグの影響を受けません.

ページ作成情報

参考資料

  1. 正規表現に関しては,Python 3.3.6 ドキュメント6.2. re ― 正規表現操作 — Python 3.3.6 ドキュメント を参考にしました.

更新履歴

2015年01月24日 ページの新規作成


no counter