[Python]replaceを使った文字列置換の徹底解説|replaceを使って文字列置換を正しくこなせるようになろう!
![[Python]replaceを使った文字列置換の徹底解説|replaceを使って文字列置換を正しくこなせるようになろう!](/dotnet/column/wp-content/uploads/2020/04/web_director_01.jpg)
- システム
エンジニア - 文字列を置き換えるメソッドについて、教えてください。
- プロジェクト
マネージャー - では、replaceを利用した文字列置き換えの方法について、実際のコードを見ながら解説していきましょう。
[Python]replaceを使った文字列置換の徹底解説
今回は、Pythonでの文字列置換について説明します。
replace()での基本的な文字列置換ができます。translate()は複数の置換をまとめて記述できます。re.sub()は正規表現での置換ができます。基本的な使い方から、正規表現での置換まで詳しく紹介します。
Pythonでの文字列置換に興味のある方はぜひご覧ください。
基本的な使い方
Pythonでのreplaceの基本的な使い方を紹介します。
実際のソースコードを見てみましょう。
1
2
3
4
|
s = 'Hello world'
# oを*に置換
print(s.replace('o', '*'))
|
実行結果は以下のようになります。
1
|
Hell* w*rld
|
最大置換回数の指定
replaceでは、最大置換回数を指定できます。実際のソースコードを見てみましょう。
1
2
3
4
|
s = 'Hello world'
# 1つめのみ置換
print(s.replace('o', '*', 1))
|
実行結果は以下のようになります。
1
|
Hell* world
|
これを応用すれば、最後にマッチした要素のみを置換できます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
|
s = 'Hello world'
# 文字列の反転
s = s[::-1]
# 1つめのみ置換
s = s.replace('o', '*', 1)
# 文字列の反転
s = s[::-1]
print(s)
|
実行結果は以下のようになります。
1
|
Hello w*rld
|
最後の文字列の反転を忘れないようにしましょう。
複数置換
Pythonのreplaceで、複数文字を置換する方法を紹介します。replace()を連結すれば、複数文字の置換ができます。
実際のソースコードを見てみましょう。
1
2
3
4
|
s = 'Hello world'
# oを*に置換し、lを+に置換
print(s.replace('o', '*').replace('l', '+')) # He++* w*r+d
|
実行結果は以下のようになります。
1
|
He++* w*r+d
|
改行の置換
Pythonのreplaceで改行文字などの特殊文字を置換する方法を紹介します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
|
s = 'Hello world.\nHello world.\nHello world.\n'
print(s)
# 改行を置換(削除)
print(s.replace('\n', ''))
|
実行結果は以下のようになります。
1
2
3
4
5
|
Hello world.
Hello world.
Hello world.
Hello world.Hello world.Hello world.
|
改行は「\n」と指定します。
リストの置換
Pythonでは、replaceでリストの中身を一括置換できます。ここでは、内包表記でreplaceを記載します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
# listの作成
str_list = ['red', 'green', 'blue', 'black', 'white']
# listの一括置換
replace_list = [s.replace('e', '*') for s in str_list]
print(replace_list)
|
実行結果は以下のようになります。
1
|
['r*d', 'gr**n', 'blu*', 'black', 'whit*']
|
リストの中身を一括置換できていることが分かります。
DataFrameの置換
Pythonでは、replaceでDataFrameの一括置換ができます。DataFrameを扱うには、ソースコードの先頭に「import pandas as pd」を記述してください。事前にsample.csvをカレントディレクトリに作成しておいてください。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
|
import pandas as pd
# csvのread
df = pd.read_csv('sample.csv')
# 置換前のDataFrameを出力
print(df)
# 置換後のDataFrameを出力
print(df.replace('male', 'man').replace('female', 'woman'))
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
name age gender
0 taro 30 male
1 hanako 35 female
2 jiro 23 male
3 takako 31 female
4 hiroko 27 female
5 ichiro 36 male
name age gender
0 taro 30 man
1 hanako 35 woman
2 jiro 23 man
3 takako 31 woman
4 hiroko 27 woman
5 ichiro 36 man
|
このように、replaceでDataFrameの一括置換ができます。
複数置換(translate)
replace()を連結すれば、複数文字の置換ができることは紹介しました。translateを使えば、もっと簡単に記述できます。
replace()の連結との差異も確認してみましょう。
1
2
3
4
5
6
|
s = 'Hello world'
# oをlに置換し、lを*に置換
print(s.replace('o', 'l').replace('l', '*')) # He*** w*r*d
# oをlに、lを*に置換
print(s.translate(str.maketrans({'o': 'l', 'l': '*'}))) # He**l wlr*d
|
実行結果は以下のようになります。
1
2
|
He*** w*r*d
He**l wlr*d
|
replace()の連結では、replaceが2回実行されることになります。oをlに置換し、lを*に置換するので、oとlが*になります。一方、translateでは、oをlに、lを*に同時に置換するので、replace()の連結と結果が異なります。
正規表現で置換(re.sub)
Pythonでは、re.sub()を使えば正規表現での置換もできます。正規表現を使用する場合は、ソースコードの先頭に「import re」を記述してください。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
|
import re
s = 'Hello world'
# 小文字を*に置換
print(re.sub('[a-z]', '*', s))
# oまたはlを*に置換
print(re.sub('[ol]', '*', s))
# 先頭文字を*に置換
print(re.sub('[^.]', '*', s))
|
実行結果は以下のようになります。
1
2
3
|
H**** *****
He*** w*r*d
***********
|
「IGNORECASE」を指定すれば、大文字小文字を区別しない置換もできます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
|
import re
s = 'Hello world. hello world.'
# IGNORECASEで大文字小文字を区別しない
r = re.compile(r'h', re.IGNORECASE)
# 正規表現で置換
res = re.sub(r, '*', s)
print(res)
|
実行結果は以下のようになります。
1
|
*ello world. *ello world.
|
正規表現にマッチした文字列をそのまま使いまわすこともできます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
|
import re
s = 'Hello world'
# 「o」または「l」にマッチした場合、マッチした文字を繰り返す。例えば、「o」がマッチした場合、「oo」になる。
print(re.sub('([ol])', '\\1\\1', s))
|
実行結果は以下のようになります。
1
|
Helllloo woorlld
|
- システム
エンジニア - replaceを利用すれば、効率よく置換できますね。
- プロジェクト
マネージャー - 文字置換だけでなく、空白の削除や数値の置換も可能です。実際にコードを書いてマスターしましょう。
まとめ
いかがでしたでしょうか。Pythonでの文字列置換について説明しました。replace()での基本的な文字列置換ができ、translate()は複数の置換をまとめて記述できます。また、re.sub()は正規表現での置換ができます。
ぜひご自身でPythonでの文字列置換についてのソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)