2015-01-29 6 views
1

Программа считывает текстовый файл и заменяет совпадающее слово на основе переменной. Проблема в том, что заменяются неточные соответствия. Так что, если я вместо «» с «да» слово «то» становится «дан»python: заменить точное соответствие с помощью переменной

for fn in os.listdir('.'): 
if os.path.isfile(fn): 
    if fn.endswith(".txt"): 

     s = open(fn).read() 

     for i in skills: 
      link = skills[i]   

      s = s.replace(i, "<a href=\"%s\">%s</a>" %(link,i), 1) 

     print "%s updated" %fn 

     f = open(fn, 'w') 
     f.write(s) 
     f.close() 

Проблема заключается в s = s.replace(i, "<a href=\"%s\">%s</a>" %(link,i), 1), где первый аргумент в s.replace() является переменной, содержащей строку Я хочу соответствовать.

Я попытался с помощью границы слов s = s.replace(r'\b'+i+r'\b', "<a href=\"%s\">%s</a>" %(link,i), 1)

и форматирование значения при i в новую переменную: regex = r'\b' + i + r'\b' и используя regex в качестве первого аргумента в s.replace, но он не работает.

Примечание. skills является словарь, содержащий слово/ссылку пары

+0

Можете ли вы предоставить примеры входных и выходных строк а также демонстрация актуальной проблемы. У нас нет ваших файлов, поэтому мы не знаем, каков ваш вклад и ожидаемый результат из 'replace'. – Marcin

ответ

3

Поскольку s является строкой, она не будет поддерживать регулярные выражения операций.

Чтобы использовать регулярные выражения в своих строках, вам нужно сделать это явно.

Так положил в начале кода

import re 

и где теперь используют

s = s.replace(i, "<a href=\"%s\">%s</a>" %(link,i), 1) 

использовать, вместо этого,

s = re.sub(r'\b'+i+r'\b', '<a href="%s">%s</a>'%(link,i), s, 1) 
0

Если string это содержимое файла для чтения:

string = string.replace('the ', 'da ') # space ensures then isn't replaced 
0

Вы должны использовать re.sub функцию при использовании регулярных выражений, чтобы соответствовать символы, которые вы хотите заменить. string.replace Функция не будет принимать регулярное выражение в качестве аргумента.

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