我正在尝试在2个正则表达式组之间插入数字;但是,我无法弄清楚如何避免引用不同的组号。
我正在尝试使用正则表达式更新目录中的文件名。本质上,我有一个电视节目季,所有文件名都应遵循“显示-S ## E ##-剧集标题”的模式
我编写了一个简单的循环来遍历文件并设置命名,但是我遇到的问题是,每个文件中的情节编号没有设置为两位数。我在下面包含了我尝试用来解决此问题的循环。
我尝试使用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))
OR
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。第一个版本也会导致错误,因为我指的是不存在的组。第二个似乎根本没有更改文件名。
答案 0 :(得分:0)
docs for re.sub
中有关于此的注释:
\g<number>
使用相应的组号;因此,\g<2>
等效于\2
,但在诸如\g<2>0
之类的替代词中并没有歧义。\20
将解释为对组20的引用,而不是对组2的引用,后跟文字字符“ 0”。
因此,以更详细的方式写出组引用,这样就毫不含糊了:
os.rename(file, re.sub(r'(S\d+E)(\d\s)',r'\g<1>0\g<2>',file))