特殊二进制数据的游程编码

问题描述 投票:0回答:1

我正在尝试以不同的方式对特殊/特定的二进制数据进行游程长度编码。 例如我的数据就像 “010010010010001000100010001001010101010100100101000010000100000010000000010000001” 它应该将“从 0 开始并以 1 结束”计为一个单词/模式,例如“01”、“001”、“0001”(依此类推) 将算作一个单词/模式,因此如果它找到多个单词/模式,则会增加“1”的数量 例如,如果找到“01”2次,它将写入“011”,如果找到3次,则应返回“0111”
如果找到“001”2次,它将写入“0011”,如果找到3次,则应返回“00111” 如果找到“0001”2次,它将写入“00011”,如果找到3次,则应返回“000111” 但如果找到一次应返回原始值,例如“01”1次“01”,“001”1次“001”等 所以操作结束时我的数据将是“0100111000111100101111100110100001100000010000000010000001”

有人可以帮助我完成这项任务吗,因为我刚刚开始学习 python/编程

python regex if-statement run-length-encoding
1个回答
0
投票

尝试:

import re

s = "010010010010001000100010001001010101010100100101000010000100000010000000010000001"

out = re.sub(
    r"(0+1)(\1*)",
    lambda g: g.groups()[0] + "1" * (len(g.groups()[1]) // len(g.groups()[0])),
    s,
)
print(out)

打印:

0100111000111100101111100110100001100000010000000010000001
© www.soinside.com 2019 - 2024. All rights reserved.