从用模板解析的字符串中提取值的优雅方法

时间:2010-08-17 12:31:25

标签: python templates

我有一个这样的模板:

foo_tmplte = Template("fieldname_${ln}_${type} = $value")

并且使用此模板解析了许多字符串,如下所示:

foo_str1 = "fieldname_ru_ln = journal"
foo_str2 = "fieldname_zh_TW_ln = journal"
foo_str3 = "fieldname_uk_ln = номер запису"

现在我想从模板中提取回变量,例如使用str1,结果必须是:

ln = ru
type = ln
value = journal

我尝试了一些方法,但我找不到任何优雅的和可重用的函数来提取变量。 有什么想法吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

为什么不使用正则表达式?他们已命名组,您可以在字典中提取它们。

Tue Aug 17 14:33:58 $ python
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01) 
[GCC 4.3.4 20090804 (release) 1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import re 
>>> foo_template = re.compile(r"^fieldname_(?P<ln>\w+?)_(?P<type>\w+) = (?P<value>.*)$")
>>> m = foo_template.match("fieldname_zh_TW_ln = journal")
>>> m
<_sre.SRE_Match object at 0x7ff34840>
>>> m.groupdict()
{'ln': 'zh', 'type': 'TW_ln', 'value': 'journal'}
>>> 

答案 1 :(得分:0)

您可以使用Jinja2,一个通用的模板库。但是,您必须更改字符串格式:

"fieldname_{{ ln }}"