2

例如,如果我有一个模板,例如

"SELECT * FROM myOrders WHERE order_id = ${orderId} and order_date = ${orderDate}"

我想获得该模板中所有占位符的列表,即 ['orderId', 'orderDate']

4

3 回答 3

1

我可以使用正则表达式来拉出这些占位符。

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
于 2016-03-25T22:07:45.243 回答
1

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']
于 2016-03-25T22:12:11.597 回答
0

这段代码:

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'}

于 2019-12-06T15:33:09.863 回答