繁体   English   中英

python正则表达式匹配(第一个多部分或简单部分)rar存档

[英]python regex expression to match (first multipart or simple part) rar archive

我想要比赛

  • 多部分rar 存档中的第一个元素

    regex (.*.)part0*1.rar

或者

  • 单部分rar存档,
    不匹配字符串包含^.*(part\\d+).rar$

我使用这个正则表达式:

regex = r"(.*)(?:part0*1|.*[^(part\d+)])\.rar"

我有一些问题:

  • apps.rar匹配,但 apps2.rar不匹配,应该
  • LA460.6.7.rar不匹配,应该
  • apps.rar 应该匹配group(1)="apps"而不是group(1)="app"

您可以检查代码段@regex101

你能在正则表达式中找到错误吗?

谢谢

你有时会匹配到最后一个字符的原因是因为你尝试的模式(.*)(?:part0*1|.*[^(part\\d+)])\\.rar ,首先在捕获组中捕获整行1.

该捕获组后跟匹配part0*1.*[^(part\\d+)]的交替

您可以看到部分后面跟有数字的行是匹配的。

但是,当没有匹配part0*1 ,会尝试下一个替代方案,即.*[^(part\\d+)]

第二个选择匹配直到字符串的末尾(它已经在那里),然后匹配[^(part\\d+)]单个字符,因为使用方括号使其成为没有量词的字符类


一种选择可能是使用否定前瞻断言字符串不包含part后跟可选零以及字符 2-9 和可选数字或| 1-9 和 1 个或多个数字。

^(?!.*part0*(?:[2-9]\d*|[1-9]\d+)\.rar)(.+)\.rar$

正则表达式演示

您可以搜索“要么有单词‘part’后跟 01/1 或根本没有‘part’这个词”的文件名

请尝试以下正则表达式

(.*part0?1|^(?!.*part.*).*)\.rar

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM