2017-07-26 28 views
-1

私の問題は、サブを行うために特殊文字をエスケープする必要があることです。しかし、私は代わりにしている文字列を変更したくありません。 Pythonにはこれを処理する方法がありますか?文字列を変更せずに特殊文字を含む文字列を使用するPython re.sub

fstring = r'C:\Temp\1_file.txt' #this is the new data that I want to substitute in 
old_data = r'Some random text\n .*' #I'm looking for this in the file that I'll read 
new_data = r'Some random text\n '+fstring #I want to change it to this 
f = open(myfile,'r') #open the file 
filedata = f.read() #read the file 
f.close() 
newfiledata = re.sub(old_data,new_data,filedata) #substitute the new data 

"fstring"の "\ 1"がグループオブジェクトとして認識されるため、エラーが返されます。

error: invalid group reference 
+1

、そうreはメタ文字として\1を扱っていない文字列をエスケープする必要がありますあなたの生の弦でそれをエスケープする。あなたは 'fstring = r'C:\ Temp \\ 1_file.txt''を試すことができますか? –

+0

ありがとう、それはうまくいきますが、たくさんのファイルを読んでいるので、私がそれを避けることができれば、それぞれを修正するために余分なコードを書く必要はありません。それは大きな問題ではないと思います。 – sparrow

+0

ああ、このサイトは時々迷惑だ。なぜ下投票? – sparrow

答えて

1

エスケープ最終的にバックスラッシュ:私は*あなたが必要とするかもしれないと思う*

new_data = r'Some random text\n ' + fstring.replace('\\', r'\\') 
+0

ありがとう、それは私が必要としたものです。 – sparrow

0

\1は、通常、正規表現マッチのグループ1に後方参照を意味するだろうが、それは(エラーの理由で、実際にはグループ1、)あなたがここに意図したものではないではありません、あなたはので、よ

fstring = r'C:\Temp\\1_file.txt' 
+0

私はそれを試しました、問題はそれが私が代用している文字列を変更しているということです:C \:\ Temp \ NA_CA_logs \ 1_file \ .txt – sparrow

+0

@sparrow結果を 'print'してみてください。 –

+0

@sparrowそれについての脳のパーツ。他のメタキャラクターがあります。スラッシュを二重にするだけで '\ 1'をエスケープすることができます。回答が更新されました: –

関連する問題