curly brackets Number 中括弧 { } で囲んだ番号を
任意の文字列で置換する処理を Java では、
oboe2uran.hatenablog.com
を書いた。
同様の処理を Python で書いてみた。
正規表現のメソッド re.sub(pattern: str, repl: str, string: str) の repl で lambda を使う。
import re def getMessage(template:str, *args): def lget(l:list, x:int, etc:str): return l[x] if x < len(l) else etc return re.sub(r'{\d+}', lambda x: lget(args, (int)(re.sub(r'{|}', '', x.group())), x.group()), template)
テスト
msg = "---{0}---{1}---{2}---{3}---{1}---" getMessage(msg, "A", "B", "C") ♯---A---B---C---{3}---B---
マッチしない時は空文字にしたい場合=*args の tuple リストに一致しない場合に空文字にする場合、
lambda で空文字列を返すようにする
import re def getMessage(template:str, *args): def lget(l:list, x:int, etc:str): return l[x] if x < len(l) else etc return re.sub(r'{\d+}', lambda x: lget(args, (int)(re.sub(r'{|}', '', x.group())), ""), template)
msg = "---{0}---{1}---{2}---{3}---{1}---" getMessage(msg, "A", "B", "C") ♯---A---B---C------B---