python中replace的小坑 - replace(‘旧‘,‘新‘,‘次数‘)

对于普通撸码的同学踩到小坑的几率不高,但对于在上位机或者和16进制二进制打交道比较多的同学可能会遇到。

比如一段报文AC260000394A5D,每一段特定长度对应的内容都要解析出来,当对这段报文进行解析翻译的时候,可能会用到replace将已经解析过的部分过滤掉。

举个例子,如果在协议规定下这段报文的解析正确应该如下:

内容是ac26,长度是4,第二个报文内容是00,长度是2,第三个是0039,长度是4,第四个是4a长度是2,最后一个是5d,长度是2。

那将这段报文套用协议翻译的话,可以用按长度顺序截取的方法,这个时候就会用到replace

    result=[]
    message='AC260000394A5D'
    messageLen=[4,2,4,2,2]
    for i in range(len(messageLen)):
        result.append(message[:messageLen[i]])
        message=message.replace(message[:messageLen[i]],'')
    print(result)

如果不限定replace的次数是1的话,那么我们在提取第二个报文00之后,replace依然会继续替换,将0039的前面两个00也替换掉,报文的提取结果result = ['AC26', '00', '394A', '5D', '']

如图:

 

我们加上replace限定次数

    result=[]
    message='AC260000394A5D'
    messageLen=[4,2,4,2,2]
    for i in range(len(messageLen)):
        result.append(message[:messageLen[i]])
        message=message.replace(message[:messageLen[i]],'',1) #增加replace限制1次
    print(result)

那么最后result=['AC26', '00', '0039', '4A', '5D']

如图:

符合预期。

小坑replace的限定还是比较坑爹

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值