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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章