python replace()未按预期工作

2024-10-01 13:42:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我的脚本应该编写html文件来更改html菜单,以使当前页面显示为^{cl1}$

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()  

以下是我要瞄准的字符串的一部分(templatetop):

^{pr2}$

Tags: htmlpagelicurrentfinditemreplaceclass
3条回答

您不应该期望这样做,因为您应该阅读the documentation

^{bq}$

因此,首先将'<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

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

另外,当您只针对templatetop时,为什么要对writeText进行替换呢?在

replacereturns生成的字符串,因此需要执行以下操作:

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')

相关问题 更多 >