2013-06-29 114 views
1

我有替换函数的问题。我可以打印链接,但无法替换链接。我忘记了哪些代码?Python替换文本(正则表达式?)

import urllib2 
import re 

htmlfile = urllib2.urlopen('http://sample.html') 
htmltext = htmlfile.read() 
regex = "'nav_a'>(.+?)</a></li>" 
pattern = re.compile(regex) 
link = re.findall(pattern,htmltext) 

downloadlink = link.replace("*text to replace*", "*replace with*") 

print (downloadlink) 
+0

我敢打赌,你的英文比我的德国好(我只记得很小的位从我的课很久以前)。你的意思是'downloadlink'只是原文而没有替代品?你需要分享你的正则表达式。 – lurker

+0

@ mbratch http://codeviewer.org/view/code:34c4 (这是一个例子,输出不是链接,但原理类似) – user2534685

+0

请改为编辑问题。 –

回答

0

如果你看看re.findall()的文件,它会返回一个列表字符串中的所有非重叠比赛。因此,你不能做link.replace(),因为link是一个列表,而不是字符串。

您必须遍历link中的每个元素并进行替换。例如,

links = re.findall(pattern,htmltext) 
downloadlinks = [] 

for link in links: 
    downloadlinks.append(link.replace("*text to replace*", "*replace with*")) 

print(downloadlinks) 

编辑(转换列表STR):

links = re.findall(pattern,htmltext) 
downloadlinks = '' 

for i, link in enumerate(links): 
    if i == 0: 
     downloadlinks += link 
    else: 
     downloadlinks += ' - ' + link 

print(downloadlinks) 
+0

非常感谢。它的功能:D – user2534685

+0

但我不能取代(单词正在工作):http://codeviewer.org/view/code:34c6 – user2534685

+0

我不确定这是你问的问题,但'downloadlinks'是另一个列表 - 所以你可以通过'downloadlinks [0]','downloadlinks [1]'等来查看每个链接。 – joon