file.replace('abcd')也替换'abcde'如何只替换精确值?

时间:2013-04-24 00:14:25

标签: python linux replace

def censor2(filename):
    infile = open(filename,'r')
    contents = infile.read()
    contentlist = contents.split()
    print (contents)
    print (contentlist)
    for letter in contentlist:
        if len(letter) == 4:
            print (letter)
            contents = contents.replace(letter,'xxxx')
    outfile = open('censor.txt','w')
    outfile.write(contents)
    infile.close()
    outfile.close()

此代码适用于Python。它接受一个文件'example.txt',读取它并循环通过用字符串'xxxx'替换所有4个字母的单词并将其输出到一个名为censored.txt的新文件(保持原始格式!)。

我使用了替换功能并找到了要替换的单词。但是,'abcd'一词被替换,下一个单词'abcde'变成'xxxxe'

如何防止'abcde'被更改?

我无法使用以下示例,但在使用re.sub模块后,我发现以下代码仅用于替换4个字母单词而不是5个字母单词。

contents = re.sub(r"(\b)\w{4}(\b)", r"\1xxxxx\2", contents)

2 个答案:

答案 0 :(得分:3)

怎么样:

re.sub(r'\babcd\b','',my_text)

这将要求它在任何一方都有字边界

答案 1 :(得分:1)

这是正则表达式有用的地方。你会想要这样的东西:

import re
...
contents = re.sub(r'\babcd\b', 'xxxx', contents)
....

\b是“字边界”标记。它匹配从单词到空格字符,标点符号等的变化。

您需要正则表达式模式的r''样式字符串,以便不将反斜杠视为转义字符。