我正在用Python编写一个“标题格式”解析器,一个fo foobar2000和Winamp。它基本上是这样的:
"%artist% - %title%" -> "The Beatles - Yellow Submarine"
"%title% by $upper(%artist%)" -> "Yellow Submarine by THE BEATLES"
有人能指出我正确的方向吗?我试过 - 并且失败了 - 使用正则表达式和lex / yacc。
编辑:与
%variables%
和$functions()
一起,我还必须实现单引号(包围原始文本)和方括号(请参阅参考资料!)。
答案 0 :(得分:1)
是否具有该格式? Python自己的字符串格式很好:
>>> tags = {'title': 'Yellow Submarine', 'artist': 'The Beatles'}
>>> tags['upperartist'] = tags['artist'].upper()
>>> '{title} by {upperartist}'.format(**tags)
'Yellow Submarine by THE BEATLES'
对于任何更复杂的事情,我会选择其中一个Python templating engines。模板写起来很有趣 - 这就是为什么有很多这样的模板! - 但是我敢打赌,其中一个人就会在你想要的时候做到。
答案 1 :(得分:0)
多个正则表达式调用是一种选择。
要识别变量,您应该使用%\w*%
并识别函数调用\$\w*\(\w*\)
然后逐步搜索变量并将它们替换为它们的值和函数调用,并通过将parethesis中的数据传递给实际函数并粘贴结果来替换它们。那是你试过的吗?
答案 2 :(得分:0)
这是我写的可能有帮助的示例。您需要根据需要展开{{1}},subs
和functions
。
apply_func