我正在尝试重命名一些文件,但是无法将头文件包围在需要这样做的正则表达式模式下。我有以下文件名示例:
TV Show Name - 101 - Pilot.jpg
,我想将其重命名为:
TV Show Name - 1X01 - Pilot.jpg
这很容易,但是当我有一些文件名时,它会变得棘手:
TV Show Name - 1001 - Episode.jpg
哪个应该去:
TV Show Name - 10X01 - Episode.jpg
我要匹配的正则表达式模式是:
'.* - [0-9]{3,4} - .*'
重命名文件的最佳方法是什么,但要检查它们是否具有3位或4位数字,并使用re.sub
将X放在适当的位置?
答案 0 :(得分:3)
您可以使用re.sub
:
import re
def new_val(d):
_d = d.group()
return _d[:len(_d)-2]+'X'+_d[len(_d)-2:]
s = ['TV Show Name - 101 - Pilot.jpg', 'TV Show Name - 1001 - Episode.jpg']
new_s = [re.sub('(?<=\s\-\s)\d+(?=\s\-\s)', new_val, i) for i in s]
输出:
['TV Show Name - 1X01 - Pilot.jpg', 'TV Show Name - 10X01 - Episode.jpg']
答案 1 :(得分:2)
name = "TV Show Name - 1001 - Episode.jpg"
pattern = re.compile("(.+ - \d+?)(\d{2} - .*)")
parts = pattern.findall(name)
parts[0][0] + 'X' + parts[0][1]
#'TV Show Name - 10X01 - Episode.jpg'
请注意:"\d+?"
所用的位数越少越好,第二部分始终只保留两位数。