首页 > 解决方案 > 如何将 sub() 方法与具有可选组的正则表达式一起使用?

问题描述

我已经在这个文件重命名程序上工作了几天了。多亏了我之前在这个网站上提出的所有“愚蠢”问题以及他们收到的高质量答案,我学到了很多东西。好吧,关于我的问题。

我的文件名格式如下:ACP001.jpg, ACP002.jpg,... ACP010.jpg, ACP011.jpg, ACP012_x.jpg, ACP013.jpg, ACP014_x.jpg

pattern = r'(ACP0)(0*)(\d+)(\.jpg)'
replace = r'\3\4'

所以这对他们中的大多数人来说都很好......但是还有一些在文件扩展名之前有“_x”。我修改了模式和替换模式如下

pattern = r'(ACP0)(0*)(\d+)(_w)*(\.jpg)'
replace = r'\3.jpg'

我想我通过硬编码替换字符串中的“.jpg”来作弊。我将如何处理匹配对象组可能具有不同大小的这些情况?在这个例子中,我基本上想要最后一组和第三组。

标签: pythonregexoptional

解决方案


使_x术语可选:

pattern = r'(ACP0)(0*)(\d+)(_x)?(\.jpg)'

我实际上不知道为什么您的模式中有这么多捕获组。我会这样写:

pattern = r'ACP(\d{3})(_x)?\.jpg'

推荐阅读