.NET開発者のためのブログメディア
[Python]replaceを使った文字列置換の徹底解説|replaceを使って文字列置換を正しくこなせるようになろう!
![[Python]replaceを使った文字列置換の徹底解説|replaceを使って文字列置換を正しくこなせるようになろう!](/dotnet/column/wp-content/uploads/2020/04/web_director_01-960x320.jpg)
- SE
 - 文字列を置き換えるメソッドについて、教えてください。
 
- PM
 - では、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
                         
                       | 
                  
- SE
 - replaceを利用すれば、効率よく置換できますね。
 
- PM
 - 文字置換だけでなく、空白の削除や数値の置換も可能です。実際にコードを書いてマスターしましょう。
 
まとめ
いかがでしたでしょうか。Pythonでの文字列置換について説明しました。replace()での基本的な文字列置換ができ、translate()は複数の置換をまとめて記述できます。また、re.sub()は正規表現での置換ができます。
ぜひご自身でPythonでの文字列置換についてのソースコードを書いて、理解を深めてください。
Search キーワード検索
Popular 人気の記事
reccomended おすすめ記事
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
- 
                  
                  
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) - 
                  
                  
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) - 
                  
                  
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) - 
                  
                  
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) - 
                  
                  
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) 

