Python中的Regex模式替换

2024-04-18 07:28:04 发布

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

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

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


Tags: 文件方法namere示例文件名show模式
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+?"取尽可能少的数字,总是为第二部分保留正好两个数字

您可以使用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']

相关问题 更多 >