我想基于模板和一组预定义块构建正则表达式,并使用 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 吞下重复项的方法,或者一种全新的解决问题的方法。