在Python中实现“标题格式”

时间:2011-04-09 23:08:03

标签: python parsing

我正在用Python编写一个“标题格式”解析器,一个fo foobar2000和Winamp。它基本上是这样的:

"%artist% - %title%" -> "The Beatles - Yellow Submarine"
"%title% by $upper(%artist%)" -> "Yellow Submarine by THE BEATLES"

这是一个简单的例子;查看herehere以供参考。

有人能指出我正确的方向吗?我试过 - 并且失败了 - 使用正则表达式和lex / yacc。

  

编辑:与%variables%$functions()一起,我还必须实现单引号(包围原始文本)和方括号(请参阅参考资料!)。

3 个答案:

答案 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}},subsfunctions

apply_func