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

2 投票
2 回答
2316 浏览
提问于 2025-04-16 02:54

我有一个这样的模板:

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

撰写回答