2013-06-29 10 views
1

У меня проблема с функцией замены. Я могу распечатать ссылку, но я не могу заменить ссылку. Какой код я забыл?Python заменить текст (regex?)

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) 

Редактировать (конвертировать список в НТР):

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

Смежные вопросы