2017-11-16 10 views
-1

私は、JPEG画像の情報を操作するためのPythonプログラムを開発しています。しかし、JPEG画像で使用されるバイトマーカーコードを探す正規表現を取得するのに問題があります。正規表現でJPEGバイトマーカーを解析する

たとえば、画像マーカーの開始は\xFF\xD8で、画像マーカーの末尾は\xFF\xD9です。私が使用しようとしたパターンは、rb'\xFF\xD8(.+?)\xFF\xD9'でした。成功はありません。バイト配列内の特定のバイトマーカーの間にあるものすべてを探したい場合、私のパターンはどうなりますか?

+0

バックスラッシュを別のバックスラッシュでエスケープする必要があります。 – ctwheels

+0

正規表現の '.'はデフォルトで改行文字にマッチしません。また、JPEGファイルには偶然にも改行が含まれています。 '.'を任意のバイトにマッチさせるために、flagsパラメータとして' re.DOTALL'を渡します(ほぼすべてのregexメソッドで利用可能です)。 – jasonharper

+0

ありがとうございます。私は実際にこれを知っていた。一致を見つける私の実際のコードは以下の通りです。 'matches = re.findall(pattern、data、flags = re.DOTALL)' –

答えて

0

文字列の 'r'接頭辞は、「バックスラッシュのエスケープを無視する」ので、無視します。

これは「X」、「F」、あなたは最初の4文字の文字列を探している、文字通り「\」rを意味し、「F」

rとの一部である二重のバックスラッシュを削除しますバイナリ文字を表すためにエスケープするのではなく、正規表現。

+0

ありがとうございました。 rを削除するか、各バイトの前に別のバックスラッシュを追加する方が良いでしょうか? –

+0

バイナリ文字を表すためにエスケープするのではなく、正規表現の一部であるrと二重のすべてのバックスラッシュを削除します。私は答えを編集して答えを完成させます。 –

+1

'r'接頭辞は、バックスラッシュがPythonの文字列リテラル構文によってエスケープとして解釈されないことを意味します - しかし、それはregexコンパイラによって解釈されることを意味します(16進値の' \ x'は正規表現コンパイラは実装しています)。ほとんどの場合、 'r'接頭辞を正規表現で使用することがほとんどです。 – jasonharper

関連する問題