python - 如何将数字插入正则表达式
问题描述
我正在尝试在 2 个正则表达式组之间插入一个数字;但是,我不知道如何避免引用不同的组号。
我正在尝试使用正则表达式来更新目录中的文件名。基本上我有一个电视节目的季节,所有文件名都应该遵循“节目 - S##E## - 剧集标题”的模式
我编写了一个简单的循环来遍历文件并设置命名,但我遇到的问题是剧集编号没有在每个文件中设置为 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 的剧集编号。第一个版本会导致错误,因为我指的是不存在的组。第二个似乎根本没有改变文件名。
解决方案
文档中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))
推荐阅读
- python - 编写 Python 函数来检查字符串是否为 pangram
- c++ - 如何将 id 写入文件然后将其读回?
- android - 如何使进度条始终位于滚动视图的中心屏幕和滑动刷新布局?
- python - sqlite3.OperationalError:没有这样的表?
- r - 如何使用 dplyr 在 R 中处理来自 excel 的日期代码
- c++ - Boost Beast 握手:sslv3 alert 握手失败错误
- c - 如何从 uint32_t 获取浮点值?
- c - 无法从 C 中的 TCP 客户端接收消息
- android - 扩展 java.util.List。用 Gson 为这种类型注册一个 InstanceCreator 可能会解决这个问题。?
- java - 有条件运行的黄瓜特定场景