【问题标题】:using a regex wildcard within a specific pattern match在特定模式匹配中使用正则表达式通配符
【发布时间】:2015-02-19 15:25:48
【问题描述】:

我的代码:

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 总是相同的,所以一个好的解决方法是告诉正则表达式 @987654322 @ 和 \x01 可以是任何东西。

所以我需要的是

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

如何在正则表达式中做到这一点?

【问题讨论】:

    标签: python regex


    【解决方案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 个字符,因此您不能在这样的转义中使用任何运算符)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多