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

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
作者:zy7y
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/zy7y/p/14666406.html