2017-01-03 6 views
0

私はバイナリファイルを読み込もうとしています。Regex pythonの式

私の目標は、私はこのようにそれを行うことができます「のいずれか、[ヘクス値を正確に1時間]、10、10 EEまたはDD]」のすべての一致を見つけることです

思想:

pattern = (b"\x10\x10\[0-9a-fA-F]?\[xDD|xEE]") 

明らかに機能していません。 3番目の部分ではエラーになるようです。私はステートメントを解剖してみましたが、x10とx11の作品は残りましたが、それはできません。

私は「[0-9a-fA-F]」について理解していますか?角括弧内の範囲に0回または1回一致することです。 3番目の部分 "xDDまたはxEE"は間違っていますか?

アイデア?

+0

あなたは、入力の2つの例を追加していただけますか? –

+0

見た[this?](http://stackoverflow.com/a/13363076/1016065) – RolfBly

答えて

1

は正規表現

b'\x10\x10.[\xdd\xee]' 

単一.マッチ任意の文字(任意の1バイト)単一の時間、および単一[ab]マッチaまたはb単一の時間を使用してください。


>>> re.match(b'\x10\x10.[\xdd\xee]', b'\x10\x10\x00\xee') 
<_sre.SRE_Match object; span=(0, 4), match=b'\x10\x10\x00\xee'> 
+0

なぜ "。"これは "\ x10 \ x10 \"のようになります。なぜx10とドットの区切り文字はないのですか? – czsffncv

+0

'.'はワイルドカードとして評価されるためです。 '\ .'は厳密にドット文字をマッチさせるためのもので、エスケープシーケンスとして機能します(ワイルドカードが必要です)。 – Uriel

+0

多くの感謝!私の最後の声明では、それは括弧の中の両方の16進値を分離するために\に変換されていますか? – czsffncv