Python学習【365日チャレンジ!】289日目のマスターU(@Udemy11)です。
楽天モバイルからRakuten UN-LIMIT Vへプラン変更しませんかというダイレクトメールを受け取るのですが、私が使っているiPhoneには未対応なので、変更できないんですよね。
1ヶ月2,980円が1年間無料で、都市部ならとりあえず5Gが使えて国内通話かけ放題なので、スマホが対応機種なら乗り換えが超お得ですよ。
それでは今日も、Python学習を始めましょう。
昨日の復習
昨日は、compile
とsplit
を使って、文字列を分割する方法をを習しました。
split
だけでも文字列を分割することができますが、複数の記号を分割するための基準にする場合は、re.compile
と正規表現の組み合わせが必要でした。
詳細については昨日の記事をごらんください。
今日は、compile
とsub
を使って、文字列を置換する方法を学習します。
sub
Python学習をはじめた頃に、replace
を使った文字列の変換を学習しました。
複数の文字列を変換する場合はreplace
を繰り返し使うことで対応できましたが、sub
は、複数の文字列を変換する便利なメソッドです。
import re
s = 'blue see and white cloud'
p = re.compile('blue|white')
print(p.sub('beautiful', s))
出力結果
beautiful see and beautiful cloud
5行目で、|(パイプ)
で文字列をつなげた引数をcompile
に入れていますが、6行目のp.sub()
で、3行目で定義した変数s
の文字列から、5行目で指定した文字(blue
とwhite
)を第1引数のbeautiful
に変換しています。
count
sub
の引数にcount
を加えることで、変換する回数を指定することができます。
print(p.sub('beautiful', s, count=1))
出力結果
beautiful see and white cloud
count
はcompile
で指定した文字の順番ではなく、回数の指定なので、blue
が文字列の後ろにもう一度出てきても変換されません。
subn
エクセルなどの変換機能を使えば、最後に【○○個の文字を置換しました。】と表示されますが、同じように置換した文字の数を取得してくれるのがsubn
です。
print(p.subn('beautiful', s))
出力結果
('beautiful see and beautiful cloud', 2)
タプルで変換した文字列と回数を取得してくれます。
関数を使った変換
sub
は、引数に関数を入れて変換することもできます。
import re
s = '11 12 123 1234 test 1'
def hexrepl(match):
value = int(match.group())
return hex(value)
p = re.compile(r'\d+')
print(p.sub(hexrepl, s))
出力結果
0xb 0xc 0x7b 0x4d2 test 0x1
5行目から7行目でhexrepl
という関数を作っていますが、hex
は16進数の変換、repl
は、sub
の第2引数で、変換後の文字ののことです。
変数s
の中から、9行目のre.compile(r'\d+')
でマッチした数字をhexrepl()
を使って16進数に変換しています。
出力結果は、数字が16進数に変換されて、アルファベットはそのまま出力されています。
まとめ
プログラムはどれだけ頭を柔らかくして、ブロックを組み合わせていけるかという意味で、レゴの遊びと似ています。
レゴを使って壮大なジオラマを作ったり、キャラクターを作ったり、イメージ次第でいろいろなものを作り上げることができます。
プログラムも同じで、いろいろなモジュールやメソッドを組み合わせることで、誰も思いつかないような便利な使い方ができる新しいモジュールを作り上げることができます。
とはいえ、すごいプログラムを作り上げるプログラマーも、最初は基本的な使い方から学習しているので、基本的な使い方をしっかりとマスターして実践に備えておきましょう。
それでは、明日もGood Python!