为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2021-09-24 15:46:43
我试图在 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。第一个版本会导致错误,因为我指的是一个不存在的组。第二个似乎根本没有改变文件名。
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

文档中re.sub有关于此的注释:

\g<number>使用相应的组号;\g<2>因此等价于\2,但在诸如\g<2>0\20将被解释为对第 20 组的引用,而不是对后跟文字字符“0”的第 2 组的引用。

所以,以更详细的方式写出组引用,这样就明确了:

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


查看完整回答
反对 回复 2021-09-24
  • 1 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信