2017-03-29 182 views
0

因此,我正在讀取.avi文件並將其索引存儲到列表中。每個元素對應一個索引電影幀。 我工作的一個腳本來刪除列表中的所有與開始出現:刪除列表中的正則表達式與Python中的正則表達式

00dc \ X10 \ X00 \ X00 \ X00

下面的代碼的短版

list = ['00dc\x00\x00\x00\x00\x025,\x00\x08\x19\x00\x00', 
     '00dc\x00\x00\x00\x00\x12N,\x00\x0b6\x00\x00', 
     '00dc\x10\x00\x00\x00&\x84,\x00\x95D\x01\x00', 
     '00dc\x00\x00\x00\x00\xc4\xc8-\x00\xe0l\x00\x00', 
     '00dc\x00\x00\x00\x00\xac5.\x00t.\x00\x00'] 

    regex1 = b'00dc\x10\x00\x00\x00.{8}' 
    newlist = [x for x in list if x != regex1] 

Aaand它沒有做任何事情,當我期望第三個元素被彈出時,列表保持不變。

我不覺得,因爲即使當我設置regex1的它匹配任何內容: '*'

b

列表保持不變。無法找出問題來自何處。謝謝

回答

1

Python不適用於內置的正則表達式。您需要導入regex模塊。

import re 
list = ['00dc\x00\x00\x00\x00\x025,\x00\x08\x19\x00\x00', 
     '00dc\x00\x00\x00\x00\x12N,\x00\x0b6\x00\x00', 
     '00dc\x10\x00\x00\x00&\x84,\x00\x95D\x01\x00', 
     '00dc\x00\x00\x00\x00\xc4\xc8-\x00\xe0l\x00\x00', 
     '00dc\x00\x00\x00\x00\xac5.\x00t.\x00\x00'] 

pattern = re.compile(b'00dc\x10\x00\x00\x00.{8}') 
newlist = [x for x in list if not re.match(pattern,x)] 

輸出:

['00dc\x00\x00\x00\x00\x025,\x00\x08\x19\x00\x00', '00dc\x00\x00\x00\x00\x12N,\x00\x0b6\x00\x00', '00dc\x00\x00\x00\x00\xc4\xc8-\x00\xe0l\x00\x00', '00dc\x00\x00\x00\x00\xac5.\x00t.\x00\x00'] 
+0

的感謝!我已經導入重新,只是完全忘了我應該編譯和匹配:) – Asymetr