我需要解压缩目录中的所有文件,为此我需要找到集合中的第一个文件。我目前正在使用一堆 if 语句和循环来执行此操作。我可以使用正则表达式来做到这一点吗?
这是我需要匹配的文件列表:
yes.rar
yes.part1.rar
yes.part01.rar
yes.part001.rar
yes.r01
yes.r001
不应匹配这些:
no.part2.rar
no.part02.rar
no.part002.rar
no.part011.rar
no.r002
no.r02
我在 this 上发现了类似的正则表达式线程,但似乎 Python 不支持可变长度环视。单行正则表达式会很复杂,但我会很好地记录它,这不是问题。这只是您解决问题的其中一个问题。
提前谢谢你们。
:)
最佳答案
不要依赖文件名来确定哪个是第一个。您最终会发现一个极端情况,在这种情况下您会得到错误的文件。
RAR's headers假设它们是在较新版本的 RAR 中创建的,将告诉您哪个文件是卷中的第一个文件。
HEAD_FLAGS Bit flags:
2 bytes0x0100 - First volume (set only by RAR 3.0 and later)
因此打开每个文件并检查 RAR header ,专门查找指示哪个文件是第一卷的标志。这永远不会失败,只要存档没有损坏。
更新:我刚刚通过查看十六进制编辑器中的一些跨越文件来确认这一点。文件头的构造与上面的链接完全相同。这只是打开文件并读取该标志的 header 的问题。带有该标志的文件是第一卷。
关于python - 正则表达式以匹配 Python 中设置的 rar 存档文件中的第一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2537882/