2016-06-27 5 views
1

文字列から引用符付きのシーケンスを削除しようとしています。私のスクリプト以下の例の場合、かなり動作します:正規表現を使用してエスケープシーケンス(例: "エスケープ文字列")を削除するにはどうすればよいですか?

import re 
doc = ' Doc = "This is a quoted string: this is cool!" ' 
cleanr = re.compile('\".*?\"') 
doc = re.sub(cleanr, '', doc) 
print doc 

は結果(予想通り):

' Doc = ' 

しかし、私は私が使用してエスケープシーケンスを削除することはできませんよ引用された文の内側に文字列をエスケープしているとき私は正しいものだと思うパターン:

import re 
doc = ' Doc = "This is a quoted string: \"this is cool!\" " ' 
cleanr = re.compile('\\".*?\\"') # new pattern 
doc = re.sub(cleanr, '', doc) 
print doc 

結果

'Doc = this is cool!' 

は予想:

'Doc = "This is a quoted string: " ' 

は、誰もが何が起こっているか知っていますか?パターン'\\".*?\\"'が間違っている場合、正しいものは何ですか?

+0

は、彼らの両方が原因で暴走エスケープの同じ表現として終わります。この問題を回避するには、生の文字列を使用します。 – TigerhawkT3

+0

その質問は非常によく尋ねられ、明確ですが、私は実際にそれをdownvotingする理由を見ません。 – Maroun

答えて

2

docにはエスケープ文字が含まれていないため、正規表現が一致しません。

文字列に接頭辞rを追加します。つまり、生の文字列として扱われ、エスケープコードは無視されます。

これを試してください:あなたは `re`モジュールへの第一及び第二の表現を送信すると

>>> doc = r' Doc = "This is a quoted string: \"this is cool!\" " ' 
>>> cleanr = re.compile(r'\\".*?\\"') 
>>> re.sub(cleanr, '', doc) 
' Doc = "This is a quoted string: " ' 
+0

迅速な答えをお寄せいただきありがとうございます。それは完璧に働いた。 – Montenegrodr

+0

この回答は、あなたのコードで 'doc'をリテラルとして定義できると仮定しています。あなたがそれをすることができれば、素晴らしい。別のソースから取得している場合は、リテラルのバックスラッシュが含まれていることをお勧めします。 – TigerhawkT3

関連する問題