问题
想象一下接收字符串的脚本:
http://whatever.org/?title=@Title@¬e=@Note@
...以及令牌列表:
['arg:Title=SampleTitle', 'arg:Note=SampleNote']
将这些标记插入到字符串中的最Pythonic方法是什么,这样,使用上面的示例,生成以下内容:
http://whatever.org/?title=SampleTitle¬e=SampleNote
我的想法
循环遍历列表,并为其包含的每个字符串拆分令牌名称,并对找到的@TOKEN_NAME
的每个实例执行正则表达式替换。
使用某种模板机制(类似于Ruby的ERB.template
所能做到的)。
帮助吗
我是Python的新手,非常喜欢专家的观点。谢谢!
答案 0 :(得分:12)
要使用Pythonic解决方案,请采用str.format
的format string syntax规范:
>>> template = "http://whatever.org/?title={Title}¬e={Note}"
>>> template.format(Title="SampleTitle", Note="SampleNote")
'http://whatever.org/?title=SampleTitle¬e=SampleNote'
您还可以解压缩命名参数的字典:
>>> template.format(**{"Title": "SampleTitle", "Note": "SampleNote"})
'http://whatever.org/?title=SampleTitle¬e=SampleNote'
如果您坚持输入格式,可以使用regular expression轻松切换到更实用的内容:
>>> import re
>>> s = "http://whatever.org/?title=@Title@¬e=@Note@"
>>> re.sub(r"@(\w+?)@", r"{\1}", s)
'http://whatever.org/?title={Title}¬e={Note}'
(请参阅正则表达式解释here)
并将令牌处理成字典:
>>> tokens = ['arg:Title=SampleTitle', 'arg:Note=SampleNote']
>>> dict(s[4:].split("=") for s in tokens)
{'Note': 'SampleNote', 'Title': 'SampleTitle'}