メッセージ curly brackets Number をPythonでも

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---