Python Tech 文字列

[初心者向け] Python 文字列の置換、特定文字の置き換えの方法一覧(保存版)

Python初心者が理解しやすい、基本のキから解説するシリーズ。

今回はPythonにおける文字列の置換(置き換え)についてです。

  • 文字列を別の表現に置換したい replace()
  • 特定の1文字を別の文字に置き換えたい translate()
  • 文字to文字の変換マッピングを作りたい translate()
  • あるパターンにマッチする文字列を置換したい re.sub()

文字列の置換の扱い方について、現役のエンジニアが解説しています。

なお、説明を明確にするために、今回は「置換」と「変換」の意味を区別しています。

置換文字(列)を別の文字(列)に置き換える
変換別の変数型(例. intやfloat)から文字列型(str)にする、または逆

 

結論

replace()は文字列strの関数(インストール、インポートは不要)

文字列を別の表現に置換

old = "bar bar foo buz"
new = old.replace('bar', 'zzz')
print(new)
# zzz zzz foo buz

 

特定の1文字を別の文字に置き換え

text = "xxx yyy zzz"
s = text.translate(str.maketrans({'x':'s', 'y':'m', 'z':'l'}))
print(s)
# sss mmm lll

 

パターンにマッチする文字列を置換

re ライブラリのimportを忘れずに。

import re
text = "foo 123 buz 567"
s = re.sub(r'[a-z]', 'Z', text)
print(s)
# ZZZ 123 ZZZ 567

 

実行環境

Python 3.9.2

 

文字列を置換する replace()

文字列を置換(置き換え)する最も簡単な方法はreplace()を使うこと。

replace()は文字列strの関数で、以下のような構文です。

t = replace(old, new, [count])

old置換前の文字列
new置換後の文字列
count(任意)置換する最大回数

 

"bar"を"zzz"に置き換えたいときは以下のように書きます。

text = "bar bar foo buz"
output = text.replace('bar', 'zzz')
print(output)
# zzz zzz foo buz

 

引数countを指定しなければ、一致する文字列はすべてnewに置換されます。

countを指定して、例えば1回だけ置換したいときは以下のようになります。
2つ目の"bar"は置換されていないことが確認できます。

text = "bar bar foo buz"
output = text.replace('bar', 'zzz', 1)
print(output)
# zzz bar foo buz

 

replace()の応用:任意の文字列を削除

文字列の中から取り除きたい部分文字列があるときは replace() を応用します。

引数 new に ""(空文字列)を指定すればOKです。

raw ="abcdef"
deleted = raw.replace('cde', '')
print(deleted)
# abf

 

replace()では、引数countを指定しなければ、一致する部分のすべてを置き換えます。

raw = "foobar_foobar"
deleted = raw.replace('foo', '')
print(deleted)
# bar_bar

 

最初に発見した部分だけ削除するには、置換回数を 1 に指定します。

raw = "foobar_foobar"
deleted = raw.replace('foo', '', 1)
print(deleted)
# bar_foobar

 

replace()の応用:2つ以上の置換を同時に行う

同じ文字列変数に対し、複数の組み合わせで置換するにはどうしたらいいでしょうか?

そんなときもreplace()を重ねて呼び出します。

text ="abc def"
s = text.replace('abc', 'zzz').replace('def', 'yyy')
print(s)
# zzz yyy

 

注意しなければならないのは、replace()は呼ばれるたび、文字列の先頭から順次置換していくということ。

最初に呼ばれたreplace()が優先されるので、後のreplace()で想定外の動作をする場合に注意しましょう。

例. replace()を単純に2回呼び出すだけでは文字列の入れ替えはできません

text ="abcdef"
s = text.replace('bc', 'ef').replace('ef', 'bc')
print(s)
# abcdbc

 

特定の1文字を別の文字に置き換える translate()

ある1文字を別の文字に置き換えるには str.translate() を利用します。

特定の1文字の置換だけなら replace() でも十分ですが、translate() は複数の組み合わせを置換可能です。

まず置き換える変換テーブル(マッピング)をstr.maketrans()で作成します。

t = str.maketrans({'x':'r', 'y':'t'})

 

その変換テーブルをstr.translate()に渡して置換を実行します。

new_string = old_string.translate(t)

 

"x"を"r"に、"y"を"t"に変換する例。

raw = "x=40 y=110"
t = str.maketrans({'x':'r', 'y':'t'})
s = raw.translate(t)
print(s)
# r=40 t=110

 

上のサンプルコードは次のようにまとめて書けます。
Pythonでよく使うコードパターンなので、覚えてしまいましょう。

s = raw.translate(str.maketrans({'x':'r', 'y':'t'}))

 

ある文字を削除するときは、変換先をNoneとします。

text = "-abc-def-"
s = text.translate(str.maketrans({'-': None}))
print(s)
# abcdef

 

記号を別の記号に置き換えるときにも使えます。

raw = "hoge [fuga] hogu"
s = raw.translate(str.maketrans({'[':'<', ']':'>'}))
print(s)
# hoge  hogu

 

パターンにマッチする文字列を置換 re.sub()

あるパターンにマッチする箇所を置換するにはライブラリ re のre.sub()を用います。
呼び出すにはreモジュールのimportが必要(インストールは不要)です。

パターンを表現するには正規表現を使います。

re.sub()の基本的な引数は次のとおり。

re.sub(pattern, repl, string)

pattern正規表現で表したパターン
repl置換後の文字列
string置換対象の文字列

 

数字部分を"n"に置き換える例

import re
text = "foo123buz567"
s = re.sub(r'\d', 'n', text)
print(s)
# foonnnbuznnn

 

特定の文字のマッチング(「いずれかを含む」)は[ ]で囲みます。

text = "foo123buz567"
s = re.sub(r'[567]', 'n', text)
print(s)
# foo123buznnn

 

複数ある文字列のいずれかがマッチするか判定するには、|(パイプ、縦線)で区切って書きます。

text = "foo123buz567"
s = re.sub(r'foo|buz', 'zzz', text)
print(s)
# zzz123zzz567

 

マッチした特定の範囲を再利用するには、グループ化して取り出します。

() で囲んだ部分はグループ化され、replで/1, /2,...と表現して取り出せます。

例えば、下記のサンプルでは、数字"123"部分が/1で取り出されています。

例. "foo"と数字の間に"bar"を挿入したいとき

text = "foo123buz567"
s = re.sub(r'foo(\d*)', r'foobar\1', text)
print(s)
# foobar123buz567

 

Pythonの学習法について

 

Python の勉強が辛くなっていませんか?

 

Pythonは比較的取り組みやすい言語と言われていますが、そうはいってもプログラミング初心者にとっては分からないことだらけ。

ゼロから独学で勉強するのは厳しい道のりです。

今回、様々な現場、システム、言語を経験してきた現役エンジニアの立場から、初心者でも挫折しない学習方法を解説する記事を書きました。

できるだけストレスがかからない勉強法を無料で解説しているので、ぜひ参考にしてみてくださいね。

 

今回参考にしたページ・資料

str.replace() 組み込み型 — Python 3.9.4 ドキュメント

str.translate() 組み込み型 — Python 3.9.4 ドキュメント

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。多くの人に役立つ情報のシェアが目標です。

人気の記事

1

会社員でプログラマーとして働いている人、インフラやネットワークのエンジニアとして働いている人の中には、フリーランスのプログラマーとして独立、もしくは転向したい人もいるので ...

2

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるよう ...

3

フリーランスのプログラマーにとって収入の向上に最も直結するのはスキルです。 必要なスキル、スキルの獲得方法が気になる人も多いでしょう。 また、これからフリーランスを目指す ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのス ...

5

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 ...

-Python, Tech, 文字列
-,

© 2021 ペンギンのーと