【发布时间】:2016-03-25 21:41:59
【问题描述】:
例如,如果我有一个模板,例如
"SELECT * FROM myOrders WHERE order_id = ${orderId} and order_date = ${orderDate}"
我想获取该模板中所有占位符的列表,即 ['orderId', 'orderDate']
【问题讨论】:
例如,如果我有一个模板,例如
"SELECT * FROM myOrders WHERE order_id = ${orderId} and order_date = ${orderDate}"
我想获取该模板中所有占位符的列表,即 ['orderId', 'orderDate']
【问题讨论】:
我可以使用正则表达式来提取这些占位符。
附言不过,如果在 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'}
【讨论】: