我在二进制文件中搜索重复数据(任意长度)(恰好是录音,用wave
模块读取)
这是我正在使用的表达式:
r = re.compile(r"((..){4,})\1")
...因为音频样本各占2个字节,结果应至少为8个字节。
然后删除重复的区域:
for match in r.finditer(buffer):
buffer = buffer.replace( match.group(0), match.group(1) )
我意识到我问了很多 - 重复的数据可以在文件中的任何位置,也可以是任意长度。实际上,该算法仅在重复区域较小(<800字节)时起作用,并且如果重复数据更接近数据流的开始则算法更成功。否则,它只返回0结果。
有没有办法扩展正则表达式匹配的可用资源?或者预测可能将问题大小减少到更易于管理的部分所需的用法?