如何在正则表达式中插入数字

时间:2018-12-24 19:58:05

标签: python regex

我正在尝试在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。第一个版本也会导致错误,因为我指的是不存在的组。第二个似乎根本没有更改文件名。

1 个答案:

答案 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))