2017-03-13 28 views
2

我是一個初學者使用python來做一些腳本。我想用我的文件"FQ_PARAMS"替換"FQ_PARAMS_PRICING"。它運作良好,但問題是,在一些文件中,我已經有這個"FQ_PARAMS_PRICING"。所以它變成了"FQ_PARAMS_PRICING_PRICING"。我想知道是否有辦法做到不重疊。我想在沒有重疊的情況下替換python

這裏是我的代碼:

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) 
+1

're.sub(r'\ bFQ_PARAMS \ b',r'FQ_PARAMS_PRICING',chaine)'如果'FQ_PARAMS'是一個單詞(如果繼續下劃線則失敗) –

+0

是否有一個錨定上下文可以依賴,說這些令牌總是被空間包圍着,或者在引號內?作爲陰性先行只有幫助,如果你能排除,接下來,所以例如,莫不是FQ_PARAMS_FOO的出現次數(這對於現在與威廉姆斯的回答仍然會收到_PRICING注射。(如@讓FrançoisFabre試圖排除以下下劃線...) – Dilettant

+0

感謝這個快速和普遍的答案。它解決了這個問題 – Jim

回答

2

您可以使用負前瞻。所以,正則表達式現在讀取:

r'FQ_PARAMS(?!_PRICING)' 
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)

先行展望(不消耗字符),超前增加了一個限制,它應該看到_PRICING時候向前看。只有這些項目是匹配的。

相關問題