2017-03-29 148 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