我希望在python中替换而不重叠

我希望在python中替换而不重叠,python,Python,我是一个使用python编写脚本的初学者。我想将我的文件中的“FQ_参数”替换为“FQ_参数定价”。它工作得很好,但问题是在某些文件中我已经有了这个“FQ\u PARAMS\u PRICING”。因此,它变成了“FQ\u参数\u定价\u定价”。我想知道是否有一种方法可以做到不重叠 这是我的密码: for file in dirs: if file.endswith('.play'): fileComplete=dirPath+"/"+file with op

我是一个使用python编写脚本的初学者。我想将我的文件中的“FQ_参数”替换为
“FQ_参数定价”
。它工作得很好,但问题是在某些文件中我已经有了这个
“FQ\u PARAMS\u PRICING”
。因此,它变成了
“FQ\u参数\u定价\u定价”
。我想知道是否有一种方法可以做到不重叠

这是我的密码:

for file in dirs:
   if file.endswith('.play'):
        fileComplete=dirPath+"/"+file
        with open(fileComplete, "r") as myfile:
            chaine=myfile.read()
            result=re.sub(r'FQ_PARAMS',r'FQ_PARAMS_PRICING',chaine)
            with open(fileComplete,"w") as fichier:
                fichier.write(result)
您可以使用负前瞻。因此,正则表达式现在显示:

r'FQ_PARAMS(?!_PRICING)'
对于目录中的文件:
如果文件.endswith('.play'):
fileComplete=dirPath+“/”+文件
以open(fileComplete,“r”)作为myfile:
chaine=myfile.read()
结果=re.sub(r'FQ_参数(?!_定价)',r'FQ_参数_定价',链)
将open(文件完成,“w”)作为fichier:
fichier.write(结果)

向前看(不使用字符),而负向前看添加了一个约束,它在向前看时不应看到该约束。只有这些项目是匹配的。

re.sub(r'\bFQ\u PARAMS\b',r'FQ\u PARAMS\u PRICING',chaine)
如果
FQ\u PARAMS
是一个单词(如果以下划线继续,则失败),是否存在可以依赖的锚定上下文,比如说这些标记总是被空格包围,或者在引号内?作为一个消极的前瞻只有帮助,如果你可以排除,那么接下来会发生什么,例如,会不会出现FQ_PARAMS_FOO(现在和Willems的答案仍然会收到一个_定价注入。(正如@Jean Françoisfare试图排除以下下划线…)感谢这个快速而全面的答案。它解决了问题
for file in dirs:
   if file.endswith('.play'):
        fileComplete=dirPath+"/"+file
        with open(fileComplete, "r") as myfile:
            chaine=myfile.read()
            result=re.sub(r'FQ_PARAMS(?!_PRICING)',r'FQ_PARAMS_PRICING',chaine)
            with open(fileComplete,"w") as fichier:
                fichier.write(result)