优雅地从模板解析的字符串提取值的方法
我有一个这样的模板:
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
你可以使用 Jinja2,这是一个通用的模板库。不过,你需要修改一下字符串的格式:
"fieldname_{{ ln }}"
2
你为什么不使用正则表达式呢?正则表达式有命名组,你可以把它们提取到一个字典里。
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'}
>>>