python - 正则表达式以匹配 Python 中设置的 rar 存档文件中的第一个文件

标签 python regex

我需要解压缩目录中的所有文件,为此我需要找到集合中的第一个文件。我目前正在使用一堆 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 bytes

0x0100 - First volume (set only by RAR 3.0 and later)

因此打开每个文件并检查 RAR header ,专门查找指示哪个文件是第一卷的标志。这永远不会失败,只要存档没有损坏。


更新:我刚刚通过查看十六进制编辑器中的一些跨越文件来确认这一点。文件头的构造与上面的链接完全相同。这只是打开文件并读取该标志的 header 的问题。带有该标志的文件是第一卷。

关于python - 正则表达式以匹配 Python 中设置的 rar 存档文件中的第一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2537882/

相关文章:

python - 我可以在命令行上指定 PyPI 服务器信息(例如用户名和密码)而不是使用 .pypirc 吗?

python - 将段落中句子的第一个单词大写

c# - 正则表达式上的多行

正则表达式:匹配模式,只要它不在开头

regex - 如何使用linux命令搜索和替换文件中的多行字符串

python - selenium.common.exceptions.WebDriverException : Message: Can not connect to the Service chromedriver. exe 打开 chrome 浏览器

python - 如何为 Django 管理员创建选项卡?

python - 导入错误 : DLL load failed while importing pyexpat: The specified module could not be found

javascript - 如何使用 Javascript 正则表达式检测没有评论和 Markdown 的句子?

python - 多线程 python 脚本静默死亡 - 如何调试