我已经为这个文件重命名程序做了几天了。我学到了很多,多亏了我之前在这个网站上问过的所有“愚蠢”的问题,以及他们所得到的高质量的答案。关于我的问题。
我的文件名采用以下格式: 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“来作弊的。当match对象组可能大小不同时,我将如何处理这些情况?在这个例子中,我基本上想要最后一个组和第三个组。
发布于 2018-09-10 10:04:32
您可以使用.来匹配除换行符以外的任何字符。考虑到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']此代码适用于所有文件扩展名,并完全消除了多组的问题。
发布于 2018-09-10 09:40:12
使_x术语具有可选性:
pattern = r'(ACP0)(0*)(\d+)(_x)?(\.jpg)'我不知道为什么你的模式中有这么多的捕获组。我会这样写的:
pattern = r'ACP(\d{3})(_x)?\.jpg'https://stackoverflow.com/questions/52254944
复制相似问题