string.Template 类无法对 (,)等特殊字符替换

221 阅读1分钟

string Template

无法替换带特殊字符的解决问题

debug.yaml

- desc: 获取年级列表 ~ faker生成用例模板
  var: {}
  expect:
    status_code: 200
    msg: ${sum(1,2)}
    hello: ${name}

问题

修改前: main.py

from string import Template

with open('debug.yaml', 'r', encoding='utf-8')as f:
    f = f.read()
    print(f)
    f_temp = Template(f)
    f = f_temp.safe_substitute({"sum(1,2)": 1, "name": "zy7y"})
    print(f)

修改前:输出

- desc: 获取年级列表 ~ faker生成用例模板
  var: {}
  expect:
    status_code: 200
    msg: ${sum(1,2)}
    hello: zy7y

tip: ${sum(1,2)} 并未被替换

解决

main.py

from string import Template

class MyTemplate(Template):
     """继承Template,重写属性 idpattern, 使其可以匹配到() ,等特殊字符"""
    idpattern = r'(?a:[_a-z][_a-z0-9].*)'

 if __name__ == '__main__':
     with open('debug.yaml', 'r', encoding='utf-8')as f:
        f = f.read()
        print(f)
        f_temp = MyTemplate(f)
        f = f_temp.safe_substitute({"sum(1,2)": 1, "name": "zy7y"})
        print(f)

输出

- desc: 获取年级列表 ~ faker生成用例模板
  var: {}
  expect:
    status_code: 200
    msg: 1
    hello: zy7y