在特定模式匹配中使用正则表达式通配符

时间:2015-02-19 15:25:48

标签: python regex

我的代码:

f = open("file.bin", 'rb')
s = f.read()
str1 = ''.join(re.findall( b'\x00\x00\x00\x12\x00\x00\x00(.*?)\x00\x01\x00\x00', s )[0])

我有一些二进制文件,我想从中提取信息(字符串)。此文件中的信息/字符串看起来像" [DELIMITER] String1 [DELIMITER] STRING2" ...这些文件中使用的分隔符总是不同的但是00总是相同的,所以一个好的解决方法是告诉正则表达式\x12\x01可以是任何东西。

所以我需要的是

str1 = ''.join(re.findall( b'\x00\x00\x00\x[ANYTHING]\x00\x00\x00(.*?)\x00\x[ANYTHING]\x00\x00', s )[0])

如何在正则表达式中执行此操作?

1 个答案:

答案 0 :(得分:1)

可以尝试

str1 = ''.join(re.findall(b'\x00\x00\x00.\x00\x00\x00(.*?)\x00.\x00\x00', s)[0], re.S)

re.S需要.才能匹配任何字符(在这种情况下为字节),包括\n(又名\x0a)。

(请注意,对于正则表达式引擎,每个\xnn只有1个字符,因此您无法在此类转义中使用任何运算符。