如何对具有可选组的正则表达式使用sub()方法?

2024-10-01 22:27:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经为这个文件重命名程序工作了几天了。我学到了很多,感谢所有的“愚蠢”的问题,在我面前的人在这个网站上问和质量的答案,他们已经收到。好吧,关于我的问题。你知道吗

我的文件名格式如下: 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'

所以这对大多数人来说都很好。。。但是还有一些在文件扩展名之前有“\u x”。我把式样和替换式样修改如下

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

我想我是通过硬编码替换字符串中的“.jpg”作弊的。如果匹配对象组的大小不同,我将如何处理这些情况?在这个例子中,我需要最后一组和第三组。你知道吗


Tags: 文件答案程序网站文件名格式质量replace
2条回答

可以使用.匹配除换行符以外的任何字符。考虑到OP只想将所有文件重命名为数字(ACP001.jpg->;1.jpg),您可以使用以下模式并替换字符串-

li=['ACP001.txt', 'ACP012.txt', 'ACP013_x.jpg'] # list of filenames
import re # built-in package for regular expressions
pattern = r'(ACP)(0*)(\d+)(.*)(\.\w+)'
replace = r'\3\5'
res = [re.sub(pattern, replace, st) for st in li]
print(res)

输出

['1.txt', '12.txt', '13.jpg']

这段代码适用于所有文件扩展名,完全消除了多个组的问题。你知道吗

使_x术语可选:

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

我真的不知道为什么你有这么多的抓捕小组。我会这样写的:

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

相关问题 更多 >

    热门问题