2017-07-19 12 views
0

私はこれが他のところでカバーされていたことは知っていますが、Pythonがエラーを返しました:無効なグループ参照

文字列はこのような恐ろしい「\ 3」の文字いたら何:そして

new_data = r'C:\temp\3_times.csv' 

...再あなたがしようとするので、あなたはグループとしてそれに言及していることを「考えて」そして、あなたはこのエラーを取得し、そのデータを使用してサブの操作を行います。

newfiledata = re.sub(old_data,new_data,filedata) 

error: invalid group reference 

文字列のそのケースを探していると、余分なコードの多くを取るとそれを渡す前に、それを直接変更せずに、このエラーを回避するためにどのような方法があります。

注:エスケープ文字を使用して文字列を変更する方法は、後でサブ関数を使用して文字列を書き込む必要があるため、オプションではありません。これは、特殊文字をエスケープする方法に関する疑問の重複ではありません。

+4

正規表現では、リテラルのバックスラッシュをエスケープする必要があります。正規表現としては 'r'C:\\ temp \\ 3_times \ .csv''となるでしょう。正規表現のリテラルのメタキャラをエスケープするだけです。あなたは 'r '([。^#| * +?()\ [\] {} \\ - ])' 'を使用してサブを行うことができます – sln

+0

@ slnは'それは生の文字列であり、スラッシュをエスケープする必要はありませんか?それともそうでないのですか? – jacoblaw

+0

@jacoblaw - 正規表現エンジンに渡すものです。すべてのリテラルメタキャラクターをエスケープする必要があります。 – sln

答えて

1

あなたは、単にre.escape()を使用できます。特殊文字をエスケープ

import re 
new_data = re.escape('C:\temp\3_times.csv') 

...、より多くの情報のためhttps://docs.python.org/2/library/re.htmlを参照してください。

+0

'すべて英数字以外の文字列をバックスラッシュで返します.'これは使用しません。これは '\ W'と等価です。すべてのメタキャラクタをエスケープしますが、コントロール、空白、おそらくはUnicodeの大部分をエスケープします。 – sln

+0

これは、 'C \\:\\\ temp \\\ x03_times \\。csv' ...メタ文字をエスケープする目的に役立ちますが、文字列を変更するので、それを使用する目的を破るサブメソッドを使用してデータを書き込みます。 – sparrow

関連する問題