Python 文字列の置換

Python学習【365日チャレンジ!】289日目のマスターU(@Udemy11)です。

楽天モバイルからRakuten UN-LIMIT Vへプラン変更しませんかというダイレクトメールを受け取るのですが、私が使っているiPhoneには未対応なので、変更できないんですよね。

1ヶ月2,980円が1年間無料で、都市部ならとりあえず5Gが使えて国内通話かけ放題なので、スマホが対応機種なら乗り換えが超お得ですよ。

↓↓↓↓↓
楽天モバイル楽天モバイル

それでは今日も、Python学習を始めましょう。

昨日の復習

昨日は、compilesplitを使って、文字列を分割する方法をを習しました。

splitだけでも文字列を分割することができますが、複数の記号を分割するための基準にする場合は、re.compileと正規表現の組み合わせが必要でした。

詳細については昨日の記事をごらんください。

今日は、compilesubを使って、文字列を置換する方法を学習します。

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行目で指定した文字(bluewhite)を第1引数のbeautifulに変換しています。

count

subの引数にcountを加えることで、変換する回数を指定することができます。

print(p.sub('beautiful', s, count=1))

出力結果

beautiful see and white cloud

countcompileで指定した文字の順番ではなく、回数の指定なので、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!