python:使用变量替换完全匹配

时间:2015-01-29 02:50:09

标签: python regex

程序读取文本文件并根据变量替换匹配的单词。问题是正在替换非精确匹配。因此,如果我要更换""用" da"单词"然后"成为" dan"

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中的第一个参数,但它不起作用。< / p>

请注意。 skills是包含字/链接对

的字典

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

如果string是您的阅读文件的内容:

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

答案 2 :(得分:0)

使用正则表达式匹配要替换的字符时,需要使用re.sub函数。 string.replace函数不会将正则表达式作为参数。