0

我的脚本应该编写 html 文件来更改 html 菜单以将当前页面显示为 class="current_page_item" 以便在呈现时突出显示。它必须做两次替换,首先将前一个当前页面设置为非当前页面,然后将新的当前页面设置为当前页面。两行 writeText.replace 似乎没有任何效果。它不会给我一个错误或任何东西。任何建议,将不胜感激。

for each in startList:
    sectionName = s[each:s.find("\n",each)].split()[1]
    if sectionName[-3:] <> "-->":
        end = s.find("end "+sectionName+'-->')
        sectionText =  s[each+len(sectionName)+12:end-1]
        writeText = templatetop+"\n"+sectionText+"\n"+templatebottom
        writeText.replace('<li class="current_page_item">','<li>')
        writeText.replace('<li><a href="'+sectionName+'.html','<li class="current_page_item"><a href="'+sectionName+'.html')
        f = open(sectionName+".html", 'w+')
        f.write(writeText)
        f.close()  

这是我要定位的字符串的一部分(模板顶部):

<li class="current_page_item"><a href="index.html" accesskey="1" title="">Home</a></li>
<li><a href="history.html" accesskey="2" title="">History</a></li>
<li><a href="members.html" accesskey="3" title="">Members</a></li>
4

3 回答 3

6

replace 返回结果字符串,所以你需要这样做:

writeText = writeText.replace('<li class="current_page_item">','<li>')
writeText = writeText.replace('<li><a href="'+sectionName+'.html','<li class="current_page_item"><a href="'+sectionName+'.html')
于 2013-05-16T05:37:32.730 回答
3

您不应该期望它会起作用,因为您应该阅读文档

返回字符串的副本,其中所有出现的子字符串 old 都替换为 new。

于 2013-05-16T05:44:24.547 回答
1

因此,首先替换'<li class="current_page_item">''<li>',然后替换'<li>''<li class="current_page_item">'。这有点好笑,我不得不说。

除了 misha 指出的问题,即 replace 返回结果之外,您的两个替换实际上相互抵消了。

>>> writeText = """<li class="current_page_item"><a href="index.html" accesskey="1" title="">Home</a></li>
... <li><a href="history.html" accesskey="2" title="">History</a></li>
... <li><a href="members.html" accesskey="3" title="">Members</a></li>"""
>>> result = writeText.replace('<li class="current_page_item">','<li>')>>> result = result.replace('<li><a href="index.html','<li class="current_page_item"><a href="index.html')
>>> result == writeText
True

现在这只是替换的第一次迭代,但这很好地表明您使用了错误的解决方案。这也意味着您可以简单地删除第一个替换,它仍然可以工作。

另外,当您只针对模板顶部时,为什么要在 writeText 上进行替换?

于 2013-05-16T05:42:07.447 回答