一尘不染

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

python

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

我在此线程上找到了一个类似的正则表达式,但是Python似乎不支持可变长度查找。单行正则表达式会很复杂,但是我会很好地记录下来,这不是问题。这只是您要解决的问题之一。

在此先感谢大家。

:)


阅读 190

收藏
2021-01-20

共1个答案

一尘不染

无需为此使用后视断言。由于您从字符串的开头开始查找,因此您可以使用先行查找和后备查找来完成所有操作。这应该工作:

^((?!\.part(?!0*1\.rar$)\d+\.rar$).)*\.(?:rar|r?0*1)$

要按照您的要求捕获文件名的第一部分,可以执行以下操作:

^((?:(?!\.part\d+\.rar$).)*)\.(?:(?:part0*1\.)?rar|r?0*1)$
2021-01-20