Python中的正则表达式模式替换

时间:2018-08-14 03:02:27

标签: python regex

我正在尝试重命名一些文件,但是无法将头文件包围在需要这样做的正则表达式模式下。我有以下文件名示例:

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放在适当的位置?

2 个答案:

答案 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+?"所用的位数越少越好,第二部分始终只保留两位数。