2017-03-24 7 views
1

私はPOST本体の内容を扱っており、各キーの値を抽出したいと思っています。私が解析しようとしているデータは次のとおりです。正規表現でエスケープ文字を避ける

s = b'----------------------------941135026682458398564529\r\nContent-Disposition: form-data; name="username"\r\n\r\nmyusername\r\n----------------------------941135026682458398564529\r\nContent-Disposition: form-data; name="password"\r\n\r\nmypassword\r\n----------------------------941135026682458398564529\r\nContent-Disposition: form-data; name="keyword"\r\n\r\nmykeyword\r\n----------------------------941135026682458398564529--\r\n' 

私は何を取得したいことは、Pythonのreモジュールを使用して値myusernamemypasswordmykeywordです。

pattern = r'\bname=\"{}\"\\r\\n\\r\\n([^-]+)\\r'  

の各キーに合わせて、必要に応じて、その後に変更されています:このような理由から、私はこのパターンを生成

username_pattern = re.compile(pattern.format("username"))          
password_pattern = re.compile(pattern.format("password"))      
keyword_pattern = re.compile(pattern.format("keyword")) 

私が直面してる問題は、すべてのバックスラッシュをエスケープなっているということです、私はpattern、代わりに以前に定義された値を保つことを定義するとき、私はを取得し、すべてのバックスラッシュはをエスケープ:

'\\bname=\\"{}\\"\\\\r\\\\n\\\\r\\\\n([^-]+)\\\\r' 

次に、<any of the compiled patterns>.search(s)メソッドを実行すると一致するものはありません。私はパターンhereをテストし、それぞれのキーワードで期待どおりに動作します。このバックスラッシュがエスケープするのを避けるにはどうすればよいですか?そして、私が求めていることが必要ではない場合、何が間違っているのですか?ありがとうございました。

+0

'r '\ bname =" {} "\ r \ n \ r \ n([^ - ] +)\ r"バックスラッシュを過度にしないでください。あなたは既に生のものを使用しています。 –

+0

@ Jean-FrançoisFabreそれはそれでした。それを指摘してくれてありがとう。あなたのコメントを回答として追加してください。 – tulians

答えて

1

あなたは既にraw接頭辞を使用しています。したがって、\rまたは\nを二重に逃げる必要はありません。文字通り(正規表現では\nまたは\\nを受け入れることになります)。

pattern = r'\bname="{}"\r\n\r\n([^-]+)\r' 

代替rawなし::だから唯一の問題は、あなたがrawとして渡す必要が\b文字のまま、私はあなたの文字列との一致を得るものと

pattern = '\\bname="{}"\r\n\r\n([^-]+)\r' 

(私はそれを文字列として使用し、バイトではありません)

2

生の文字列は、リテラルの解析方法にのみ影響します。文字列オブジェクトはあなたが入力したものを覚えておく方法がないので、バックスラッシュがエスケープされていることを示すときには、非生のリテラルが何をしているのかを示しています。

>>> re.compile('\r', re.DEBUG) 
LITERAL 13 
>>> re.compile('\\r', re.DEBUG) 
LITERAL 13 
>>> re.compile(r'\r', re.DEBUG) 
LITERAL 13 

しかし、これではありません:

これらの3つは等価です

>>> re.compile(r'\\r', re.DEBUG) 
LITERAL 92 
LITERAL 114 
関連する問題