テンプレートと事前定義されたブロックのセットに基づいて正規表現を作成し、置換にstring.Templateを使用したいと思います。
例えば:
- レンプレート:
/data/${year}_${month}_${day}/${year}${month}${day}_${type}_${id}.dat
- ブロック:
- 日:
(?P<day>\d{2})
- 月:
(?P<month>\d{2})
- 年:
(?P<year>\d{4})
- タイプ:
(?P<typechar>[BDPCLNIYSQJ])
- id:
(?P<id>\d{8})
- 日:
>>> string.Template(template).safe_substitute(blocks)
/data/(?P<year>\d{4})_(?P<month>\d{2})_(?P<day>\d{2})/(?P<year>\d{4})(?P<month>\d{2})(?P<day>\d{2})_(?P<typechar>[BDPCLNIYSQJ])_(?P<id>\d{8}).dat
問題は、正規表現で受け入れられない重複した名前グループにあります。
テンプレートを修正する方法(置換の前または後)、重複を飲み込むためにreをだます方法、または問題への完全に新しいアプローチのいずれかを探しています。