【发布时间】:2013-06-14 18:25:00
【问题描述】:
我最近收到了一个用于生成 HTML 的文件,一个菜单模板,由于时间限制,python 原型可以正常工作,但它是蛮力的,仅适用于这种情况。
我知道必须有更好的方法来做到这一点,但我的 Google 搜索没有帮助。这是模板文件的样子
[text](link)
[text](link)
>[text](link)
>[text](link)
>>[text](link)
>>[text](link)
>>[text](link)
[text](link)
>[text](link)
我已经设法将它强行强制到这个结构中(希望不会错过 ] 或 [ 某处 XD)
[
[ [text](link), [] ],
[ [text](link), [
[ [text](link), [] ],
[ [text](link), [
[ [text](link), [] ],
[ [text](link), [] ],
[ [text](link), [] ],
] ],
],
[ [text](link), [
[ [text](link), [] ],
] ],
]
但我基本上是通过跟踪根、父级然后在行首检查“”、“>”或“>>”然后将 [ text, [] ] 附加到“”的基础,“>”的根和“>>”的根[父]。问题是我想为 N*> 解决问题,但我不确定如何继续,甚至不知道要搜索什么。 在 Python 中,答案可以是任何语言,Python 是最快的组合
menu = []
f = open('template_file', 'r')
root = 0
parent = 0
for line in f:
line = line.strip()
m = re.match('(.*)(\[.*)', line)
if m:
prefix = m.group(1)
link = m.group(2)
if prefix == "":
menu.append([link, []])
root += 1
parent = 0
elif prefix == ">":
menu[root - 1][1].append([link, []])
parent += 1
elif prefix == ">>":
menu[root - 1][1][parent - 1][1].append([link, []])
所以这行得通,但看起来很糟糕我想防止问题进一步发生。
非常感谢。
【问题讨论】:
-
我最近一直在摆弄 Haskell,感觉这个问题用 Haskell 很容易解决,但我还没有完全解决。
标签: python html templates data-structures text-parsing