2017-03-13 6 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

もし 'FQ_PARAMS'が単語であれば' re(r '\ bFQ_PARAMS \ b'、r'FQ_PARAMS_PRAMING '、chaine) ' –

+0

は頼りになるアンカーコンテキストがありますか?これらのトークンは常にスペースや引用符で囲まれていますか?否定的な先読みは、あなたが除外することができれば、例えばFQ_PARAMS_FOOの発生が起こる可能性があります(これは今のところWillemsの回答では依然として_PRICINGの注射を受けます)(@ Jean-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を見てはならないという制約が追加されます。これらの項目のみが一致します。

関連する問題