例如,如果我有一个模板,例如
"SELECT * FROM myOrders WHERE order_id = ${orderId} and order_date = ${orderDate}"
我想获得该模板中所有占位符的列表,即 ['orderId', 'orderDate']
我可以使用正则表达式来拉出这些占位符。
ps 不过,在 Cheetah API 中拥有该功能会很好,也许在 Template 类中。
例子:
import re
templateDef = """
SELECT * FROM myOrders WHERE order_id = ${orderId} and order_date = ${orderDate}
"""
placeholders = re.findall(r"\${(\w+)}", templateDef)
print placeholders
Formatter.parse应该可以工作:
s = "SELECT * FROM myOrders WHERE order_id = ${orderId} and order_date = ${orderDate}"
from string import Formatter
#literal_text, field_name, format_spec, conversion
print([plh for _, plh, _,_ in Formatter().parse(s) if plh])
['orderId', 'orderDate']
这段代码:
vars = set()
class DummyDict:
def __getitem__(self, key):
vars.add(key)
return 'X'
str(Template('Hello $A $B $C', searchList=[DummyDict()]))
print(vars)
印刷:
{'B','A','C'}