如何将数字插入正则表达式

我试图在 2 个正则表达式组之间插入一个数字;但是,我不知道如何避免引用不同的组号。


我正在尝试使用正则表达式来更新目录中的文件名。基本上我有一季电视节目,所有文件名都应该遵循“Show - S##E## - Episode Title”模式


我已经编写了一个简单的循环来迭代文件并设置命名,但我遇到的问题是剧集编号并未在每个文件中设置为 2 位数字。我在下面包含了我试图用来解决这个问题的循环。


我尝试使用 re.sub() 将 S##E 标识为组 1,将以下数字标识为组 2,然后在两组之间插入一个“0”,但我最终引用了组 10,哪个没有定义。我不确定如何在不引用组 0 或插入反斜杠的情况下转义组引用。


files = [f for f in os.listdir(os.path.abspath(os.curdir)) if os.path.isfile(f)]

for file in files:

    os.rename(file, re.sub(r'(S\d+E)(\d\s)',r'\10\2',file))

或者


files = [f for f in os.listdir(os.path.abspath(os.curdir)) if os.path.isfile(f)]

for file in files:

    os.rename(file, re.sub(r'(S\d+E)(\d\s),r'\1'+'0'+r'\2', file))

预期结果应该是所有文件都遵循 S##E## 模式,即使情节编号低于 10。第一个版本会导致错误,因为我指的是一个不存在的组。第二个似乎根本没有改变文件名。


慕侠2389804
浏览 188回答 1
1回答

慕的地10843

文档中re.sub有关于此的注释:\g<number>使用相应的组号;\g<2>因此等价于\2,但在诸如\g<2>0.&nbsp;\20将被解释为对第 20 组的引用,而不是对后跟文字字符“0”的第 2 组的引用。所以,以更详细的方式写出组引用,这样就明确了:os.rename(file,&nbsp;re.sub(r'(S\d+E)(\d\s)',r'\g<1>0\g<2>',file))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python