我用python正則表達式解析流十六進制數據。我有我試圖從分組流中提取以下的分組結構:python正則表達式使用捕獲組來定義另一個組長度{}
'\xaa\x01\xFF\x44'
- \的Xaa - 分組的開始
- \ X01 - 數據長度[值可以從00-FF變化]
- \ XFF - 數據
- \ X44 - 包結束
我想使用正則表達式蟒指示多少數據包的數據部分,以匹配這樣:
r = re.compile('\xaa(?P<length>[\x00-\xFF]{1})(.*){?P<length>}\x44')
這個編譯沒有錯誤,但它不工作。我懷疑它不工作,因爲它的正則表達式引擎不能將<length>
命名的組十六進制值轉換爲正則表達式{}
表達式中使用的適當整數。有沒有一種方法可以用python完成,而不需要傳播比賽組?
背景:我一直在使用Erlang的數據包拆包,我一直在尋找蟒蛇
如果您確定該點的數據包結構'\ x44'結束,你能逃脫使用'\ xaa。(。*?)\ x44'?還是有可能在數據包的有效載荷中遇到'\ x44'? –
這是一個在串行接口上運行的流式協議。我可能會收到超過1個數據包或1.5個數據包的讀取數據。考慮到這一點,我必須驗證匹配的內容是數據包的真實性。只是匹配的開始和結束塊是不夠的,因爲數據本身可能包括\ xaa,\ x44 bytes – user2163865
在這種情況下,我認爲正則表達式不是您的答案。我會構建一些使用'deque'的東西,讓新的傳入數據包對其進行擴展,然後從中檢索消費者(可能會進行一些基於狀態的解析,具體取決於傳入流的複雜程度)。 –