2017-01-03 408 views
0

我想讀取一個二進制文件。正則表達式python表達式

我的目標是找到所有的比賽「10,10,[任意進制值只有一個時間]或者EE或DD,]」

想我可以做這樣的:

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

顯然不工作。看起來它在第三部分變成了一個錯誤。我嘗試解析聲明和x10和x11的作品,但其餘的不會。

我對「[0-9a-fA-F]?」的理解它是否與括號中的範圍相匹配0或1次。第三部分「xDD或xEE」我錯了嗎?

任何想法?

+0

能否請您添加,輸入的兩個例子? – 2017-01-03 13:59:20

+0

看到[這個?](http://stackoverflow.com/a/13363076/1016065) – RolfBly

回答

1

使用正則表達式

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

單個.匹配任何字符(任何一個字節)單時間,和一個單一匹配[ab]ab一次。


>>> 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

非常感謝!所以在我最後的聲明中,除了|以外,一切都是正確的哪個肩膀已經變成了一個\因此分開括號內的兩個十六進制值? – czsffncv