2017-04-23 44 views
-4

我有很長的字符串變量滿十六進制值:切片字符串轉換成列表基於reoccuring模式

hexValues = 'AA08E3020202AA08E302AA1AA08E3020101'等。

第一2 bytes (AA08)是一幀的開始和簽名其餘的數據直到下一個AA08是簽名的內容。

我想切片串入基於幀標誌的重現的啓動列表,例如:

list = [AA08, E3020202, AA08, F25S1212, AA08, 42ABC82]等等

我不知道我該怎麼分割字符串像這個。一些幀也被破壞,幀的起始位置會有AA08,但也許AA01 ..所以我需要某種正則表達式來發現這些幀。

如果我做list = hexValues.split('AA08)',只需在列表中刪除幀的所有啓動...

所以我有點卡住了。

新手來蟒蛇。

感謝

+2

歡迎來到Stack Overflow。我們可以幫助您的唯一方法就是如果您遇到某些問題和/或錯誤。我們不會爲您編寫解決方案。我不認爲你的問題是* python *是新手,如果你不知道如何編寫解決方案,python不會做魔術。試着自己去一下,如果你在某個部分掙扎,回來一個具體的問題。 –

+1

當然你可以從分割的結果中得到想要的列表。讓所有其他元素成爲「AA08」都不會傳達任何信息。如果你想讓其他所有元素都成爲「AA08」,那就去做吧。 –

+0

同意以上兩點,另外:除了'AA01'外,什麼意思是「損壞」的幀?你並不確定該字符串需要拆分的位置。 – gyre

回答

2

因爲當你不具備的情況下「被破壞」的數據下面應該做的:

hex_values = 'AA08E3020202AA08E302AA1AA08E3020101' 
delimiter = hex_values[:4] 
hex_values = hex_values.replace(delimiter, ',' + delimiter + ',') 
hex_list = hex_values.split(',')[1:] 
print(hex_list) 


['AA08', 'E3020202', 'AA08', 'E302AA1', 'AA08', 'E3020101'] 
+0

這是解決問題的優雅方式。 –

0

不考慮損壞,您可以嘗試這個。

l = [] 
for s in hexValues.split('AA08'): 
    if s: 
     l += ['AA08', s]