【问题标题】:Regex edit of a binary file/string using python使用 python 对二进制文件/字符串进行正则表达式编辑
【发布时间】:2012-07-17 07:48:54
【问题描述】:

我正在寻找一种在 python 2.7 中使用正则表达式对二进制文件进行字符串替换的方法。

s 是我从读取二进制文件中得到的字符串。它包含这个序列(十六进制):

'00 00 03 00 00 01 4A 50 20 43 52 55 4E 43 48 20 32 20 45 51 00 F7 00 F0'

这里是我用来查找子字符串的变量:

f01 = re.findall( br'\x03\x00\x00\x01(.*?)\xF7\x00\xF0', s)

这是我的潜艇:

f99 = re.sub( br'\x03\x00\x00\x01(.*?)\xF7\x00\xF0', br'\x03\x00\x00\x01\x4B\x4B\x4B\x4B\xF7\x00\xF0', s) 

现在,虽然我没有错误,但我的 sub 似乎没有改变我的字符串。我错过了什么吗?

>>> f01 = re.findall( br'\x03\x00\x00\x01(.*?)\xF7\x00\xF0', s)
>>> print f01[0]
JP CRUNCH 2 EQ
>>> f99 = re.sub( br'\x03\x00\x00\x01(.*?)\xF7\x00\xF0', br'\x03\x00\x00\x01\x4B\x4B\x4B\x4B\xF7\x00\xF0', s)
>>> print f99
MThd
>>> print f99[0]
M
>>> print f01[0]
JP CRUNCH 2 EQ
>>> f01 = re.findall( br'\x03\x00\x00\x01(.*?)\xF7\x00\xF0', s)
>>> print f01[0]
JP CRUNCH 2 EQ

我想将我的初始字符串更改为 \x03\x00\x00\x01\x4B\x4B\x4B\x4B\xF7\x00\xF0 以便将其存储到文件中。

【问题讨论】:

  • 谢谢,我试过了,但还是一样的 IMO:
  • >>> f99 = re.sub( b'\x03\x00\x00\x01(.*?)\xF7\x00\xF0', b'\x03\x00\x00\x01 \x4B\x4B\x4B\x4B\xF7\x00\xF0', s) >>> 打印 f99[0] M >>> f01 = re.findall( br'\x03\x00\x00\x01(.*? )\xF7\x00\xF0', s) >>> 打印 f01[0] JP CRUNCH 2 EQ

标签: python regex hex


【解决方案1】:

r'' 字面前缀使所有斜杠都按字面意思解释,即r'\x00' 不是单个零字节,而是 4 个字符。

为避免将随机字节解释为正则表达式元字符,您可以使用re.escape function

为避免在替换字符串中重复前缀、后缀,您可以使用正则表达式'lookahead,lookbehind:

>>> s
'\x00\x00\x03\x00\x00\x01JP CRUNCH 2 EQ\x00\xf7\x00\xf0'
>>> pre = b'\x03\x00\x00\x01'
>>> suff = b'\xf7\x00\xf0'
>>> re.sub(br'(?<=%s).*?(?=%s)' % tuple(map(re.escape, [pre, suff])), b'\x4b'*4, s)
'\x00\x00\x03\x00\x00\x01KKKK\xf7\x00\xf0'

您可能需要re.DOTALL 正则表达式标志来强制. 也匹配换行符。

【讨论】:

  • 嗨塞巴斯蒂安,感谢您的回答,这对我来说很复杂。我需要自己尝试并记录下来。无论如何感谢这个“神奇公式”,它似乎按我的意图工作
  • @Waraba:您也可以将正则表达式生成为:br'(?&lt;={}).*?(?={})'.format(re.escape(pre), re.escape(suff))。可能更容易理解。
  • @J.F. Sebastian:原始替换字符串中的其他转义由 re 模块翻译(例如,\t 是),但 \x 不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 2023-03-27
  • 2018-05-19
相关资源
最近更新 更多