2017-01-03 239 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