python查找子字符串出现的所有位置

简介

通过正则表达式将字符串中找出所有字符串出现的位置,可以用于文件格式提取等工作…

例子

通用模型

import re
addr = [substr.start() for substr in re.finditer(子字符串, 原字符串)]

比如在原字符串buf中寻找子字符串sub 1出现过的位置

>>> import re
>>> buf = "1231234567890absd11aasda1;;;\x00\x44"
>>> sub = "1"
>>> [substr.start() for substr in re.finditer(sub, buf)]
[0, 3, 17, 18, 24]

查找文件头

在文件中提取ELF文件信息等:

import re
file_type = {
    "\x00": "none",
    "\x01": "rel",
    "\x02": "elf",
    "\x03": "so",
    "\x04": "core"
}

filename = "./test"
buf = open(filename, "rb").read()
sub = "\x7fELF....\x00\x00\x00\x00"
addr = [substr.start() for substr in re.finditer(sub, buf)]
addr.append(len(buf))
for i in range(len(addr) - 1):
    if addr[i + 1] - addr[i] > 0x40:
        data = buf[addr[i]:addr[i + 1]]
        try:
            ftype= file_type[data[0x10]]
            filename = "{}.elf".format(ftype)
            open(filename , "wb").write(data)
        except Exception as e:
            continue
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值