2013-06-29 115 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