👨💻
PythonとJavaScriptで複数文字を一気に置換したいとき
PythonとJavaScriptでの文字置換の便利な方法
例えば、a
を3
に、e
を2
に、i
を1
に書き換えたい場合、PythonとJavaScriptでそれぞれ方法を記述。一番簡単な方法でいえば replace
を何回も使えば実装可能ではあるが、それだとコード量が多くなってしまうので違う方法を考えた。
Python
Pythonでは、translate()
メソッドとstr.maketrans()
を使って、一度に複数の文字を置換することができる。
text = "apple pie"
# 置換パターンを辞書で定義
replacements = str.maketrans({
'a': '3',
'e': '2',
'i': '1'
})
# 文字置換を一度に実行
text = text.translate(replacements)
print(text) # 出力: 3ppl2 p13
また、maketransはもう少し書き方を省略することができ、辞書型として記述しなくてもよい
text = "apple pie"
# 文字置換を一度に実行
text = text.translate(str.maketrans('aei','321'))
print(text) # 出力: 3ppl2 p13
他にも、リスト内包表記とjoin()
メソッドを使って文字列を置換する方法もある。
text = "apple pie"
# 置換パターンを辞書で定義
replacements = {'a': '3', 'e': '2', 'i': '1'}
# 文字を一つずつ置換してリストに格納し、結合する
text = ''.join([replacements.get(char, char) for char in text])
print(text) # 出力: 3ppl2 p13
さらに、正規表現を使った方法もある。ただし、最初に記述したmaketransの実装が一番簡単ではあると思う。
import re
text = "apple pie"
# 置換パターンを定義
replacements = {'a': '3', 'e': '2', 'i': '1'}
# 正規表現を使って一度に文字置換
text = re.sub('|'.join(replacements.keys()), lambda match: replacements[match.group(0)], text)
print(text) # 出力: 3ppl2 p13
JavaScript
JavaScriptでは、正規表現と置換パターンを使って、一度に複数の文字を置換することができる。
let text = "apple pie";
// 置換パターンをオブジェクトで定義
const replacements = {
'a': '3',
'e': '2',
'i': '1'
};
// 文字置換を一度に実行
text = text.replace(/[aei]/g, match => replacements[match]);
console.log(text); // 出力: 3ppl2 p13
また、split()
とmap()
, join()
メソッドを組み合わせて文字列を置換する方法もある。
let text = "apple pie";
// 置換パターンをオブジェクトで定義
const replacements = {
'a': '3',
'e': '2',
'i': '1'
};
// 文字列を配列に変換し、置換後に再度結合する
text = text.split('').map(char => replacements[char] || char).join('');
console.log(text); // 出力: 3ppl2 p13
一応思いついたものを記述しましたが、他にも便利な書き方などあればコメント欄でも教えていただけると嬉しいです🙇🙇🙇
Discussion