关于openlist文件命名
正则表达式的重命名
1. 在前面加上中文名并保留年份第几季第几集
第一行 (源文件名正则表达式):
^(\d{4})\.(S\d{2})(E\d{2})\..*\.(.*)$第二行 (新文件名正则表达式):
[您的中文名称].$1.$2$3.$4示例
源文件: 2025.S02E01.2160p.MAX+.HDR.60fps..WEB-DL.HEVC.10bit.DDP.mp4
- 第一行 (匹配): ^(\d{4}).(S\d{2})(E\d{2})...(.)$
- 第二行 (替换为): 剧集名称.$1.$2$3.$4
- 新文件名: 剧集名称.2025.S02E01.mp4
正则表达式分解
第一行 (匹配):
- ^:匹配文件名的开头。
- (\d{4}):捕获组 1 ($1)。匹配并捕获4位数字(年份 2025)。
- .:匹配一个字面上的点。
- (S\d{2}):捕获组 2 ($2)。匹配并捕获 "S" 和两位数字(季 S02)。
- (E\d{2}):捕获组 3 ($3)。匹配并捕获 "E" 和两位数字(集 E01)。
- ..*:匹配一个点,然后匹配所有中间的“垃圾”元数据。
- .:匹配最后一个点(在后缀名前的那个点)。
- (.*):捕获组 4 ($4)。匹配并捕获文件后缀(mp4)。
- $:匹配文件名的结尾。
第二行 (替换):
- 剧集名称.:添加您想要的中文名和一个点。
- $1: 插入捕获的年份(2025)。
- .: 插入一个点。
- $2: 插入捕获的季(S02)。
- $3: 插入捕获的集(E01)。
- .: 插入一个点。
- $4: 插入捕获的后缀(mp4)
2.把英文名改中文名并保留年份第几季第几集
示例
源文件: my moontv.2025.S02E01.2160p.MAX+.HDR.60fps..WEB-DL.HEVC.10bit.DDP.mp4
第一行 (源文件名正则表达式):
^.*\.(\d{4})\.(S\d{2})(E\d{2})\..*\.(.*)$第二行 (新文件名正则表达式):
[您的中文名称].$1.$2$3.$43.保留所有元数据,只在前面加入中文名
第一行 (源文件名正则表达式):
^(.*)$第二行 (新文件名正则表达式):
[您的中文名称].$1应用后: [您的中文名称].2025.S02E01.2160p.MAX+.HDR.60fps..WEB-DL.HEVC.10bit.DDP.mp4
4. “反向”重命名修复
第一行 (匹配错误的文件):
^(错误名)(.*)$第二行 (替换为正确的):
正确名$2- ^:匹配开头。
- (错误名):捕获组 1 ($1)。精确匹配您打错的那个词。
- (.*):捕获组 2 ($2)。捕获文件名中所有剩余的部分 (例如 .2025.S02E01.mp4)。
- $:匹配结尾。
- 正确名:输入正确的中文名。
- $2:插入我们刚刚捕获的“文件名剩余部分”。
5. 常用命名
示例:Sword.of.Coming.S01E01.2160p.WEB-DL.HEVC.DDP.3Audios.mp4
正名:剑来.S01E01.第01集.mp4
第一行 (源文件名正则表达式):
^.*\.(S\d{2})(E(\d{2}))\..*\.(.*)$第二行 (新文件名正则表达式):
剑来.$1$2.第$3集.$4这里的原理是什么?
为了让您看得明白,我们把这个表达式拆解开:
第一行(匹配):
- ^.*.:匹配开头直到季号(S01)之前的那个点(即忽略 Sword.of.Coming.)。
- (S\d{2}):捕获组 1 ($1)。匹配并捕获季号,例如 S01。
(E(\d{2})):这里包含两个捕获组:
- 捕获组 2 ($2):匹配完整的 E01。
- 捕获组 3 ($3):只匹配里面的数字 01(用于填入“第xx集”)。
- ..*.:匹配中间所有的元数据(2160p.WEB-DL...)直到最后一个点。
- (.*)$:捕获组 4 ($4)。捕获最后的后缀名 mp4。
第二行(替换):
- 剑来.:您要求的中文固定开头。
- $1$2:将捕获的 S01 和 E01 连在一起,变成 S01E01。
- .第$3集:使用捕获组 3 中的数字,生成 .第01集。
- .$4:补回后缀名。
6. 只有集名
示例:第01集.mp4
正名:神墓.S01E01.mp4
第一行 (源文件名正则表达式):
^(第)(\d{2})(集)\.(.*)$第二行 (新文件名正则表达式):
神墓.S01E$2.$1$2$3.$47. 改标准名
示例:神墓 - S03E01 - 第 01 集.mkv
正名:神墓.S03E01.2025.第01集.mkv
第一行 (源文件名正则表达式):
^(.+?)\s*-\s*(S\d{2}E\d{2})\s*-\s*第\s*(\d{2})\s*集\.(mkv|mp4)$或者
^(.+?)\s*-\s*(S\d{2}E\d{2})\s*-\s*第\s*(\d{2})\s*集\.(.*)$- ^(.+?): 匹配文件名的开始部分,并捕获到第一个分组(如 "神墓")。
- \s-\s: 匹配可能存在的空格和连接符 "-".
- (S\d{2}E\d{2}): 捕获季和集(如 "S03E01")。
- \s-\s第\s*: 匹配可能的空格和 "第" 字符。
- (\d{2}): 捕获数字部分(如 "01")。
- \s*集.(mkv|mp4)$: 匹配 "集" 字符和后缀(包括 ".mkv" 和 ".mp4")。
第二行 (新文件名正则表达式):
$1.$2.2025.第$3集.$4- $1: 将匹配到的第一个分组(文件名称)放入。
- $2: 将匹配到的第二个分组(季集信息)放入。
- 2025: 添加年份。
- 第$3集: 将匹配到的第三个分组(集数)放入,并保持格式。
- .$4: 在文件名末尾添加原后缀(.mkv 或 .mp4)。
8. 通用改名
示例:玄界之门 - S01E01 - 第 1 集.mp4
正名:玄界之门.S01E01.2025.第01集.mp4
第一行 (源文件名正则表达式):
^(.*?)\s*-\s*(S\d+)(E(\d+))\s*-\s*第\s*\d+\s*集\.(.*)$第二行 (新文件名正则表达式):
$1.$2$3.2025.第$4集.$5- 这个表达式特别处理了您提到的 “第 1 集”变为 “第 01 集” 的问题:
- 捕获组 $1 ((.*?)):抓取开头的中文名 玄界之门。
- 忽略 \s-\s:自动去掉中间多余的空格和横杠。
捕获组 $3 (E(\d+)) 和 $4 ((\d+)):
- 这是最关键的一步。原始文件名最后是“第 1 集”(只有一位数),但 E01 里已经自带了两位数 01。
- 我们直接抓取 E01 里的 01(即捕获组 $4),用来填充到后面的“第xx集”里。
- 这样,即使后面写的是“第 1 集”或“第 001 集”,最后都会统一跟随 E 后面的数字。
- 捕获组 $5 ((.*)$ ):抓取后缀名 mp4\。
9. 长名改短名
原文件名:玄界之门.S01E09.2025.2160p.WEB-DL.H264.AAC.mp4
新文件名:玄界之门.S01E09.2025.第09集.mp4
第一行 (源文件名正则表达式):
^(.*?)\.(S\d+)(E(\d+))\.((\d{4}))\..*\.(.*)$第二行 (新文件名正则表达式):
$1.$2$3.$5.第$4集.$7- $1: (.*? ) -> 玄界之门
- $2: (S\d+) -> S01
- $3: (E(\d+)) -> E09
- $4: (\d+) -> 09 (第3组内部的括号)
- $5: ((\d{4})) -> 2025
- $6: (\d{4}) -> 2025 (第5组内部的括号)
- $7: (.*) -> mp4 (后缀名)
原始文件名: 玄界之门.S01E09.2025.2160p.WEB-DL.H264.AAC.mp4
匹配结果:
- $1 = 玄界之门
- $2$3 = S01E09
- $5 = 2025
- $4 = 09
- $7 = mp4
替换后: 玄界之门.S01E09.2025.第09集.mp4
10. 反斜杠 \
在正则表达式中,反斜杠 \ 的官方名称叫 “转义字符” (Escape Character)。
它的作用可以简单理解为:“切换身份”。它主要有两种用途:
10.1 把“特殊身份”变回“普通身份”
正则表达式中有很多符号自带“超能力”(元字符),比如:
.代表“匹配任意单个字符”。*代表“匹配前面的内容任意多次”。()代表“创建一个捕获组”。
问题来了: 如果你的文件名里真的有一个点 .,你该怎么告诉电脑你想匹配那个真实的“点”,而不是让它使用“匹配任意字符”的超能力?
做法: 在符号前面加一个 \。
\.:匹配一个真实的、普通的点号。\(:匹配一个真实的左括号。\\:匹配一个真实的反斜杠本身。
在你的例子中: 你写的 ^(.*?)\.(S\d+) 里的 \. 就是在告诉正则:“这里必须是一个真实的.用来分隔文件名的点。”
10.2 把“普通字母”变成“特殊指令”
有些普通的英文字母,在加了 \ 之后,就会获得“特异功能”。
| 符号 | 意思 | 记忆法 |
|---|---|---|
\d | 匹配任何一个数字 (0-9) | digits (数字) |
\w | 匹配任何一个字母、数字或下划线 | word (单词字符) |
\s | 匹配一个空格、制表符等空白 | space (空格) |
\D | 匹配任何一个非数字字符 (大写代表否定) | Not digits |
在你的例子中: 你写的 (\d{4}) 里的 \d 就是在命令正则:“去帮我找连续的 4 个数字。”
总结对比:
| 表达式 | 它匹配的是什么? | 为什么? |
|---|---|---|
. | A, 8, %, 中 等任何东西 | . 有“匹配万物”的特权。 |
\. | 只能匹配 . 这个符号 | \ 剥夺了它的特权,让它变回平民。 |
d | 只能匹配字母 d | 它只是个普通字母。 |
\d | "0, 1, 2 等任何数字" | \ 赋予了它寻找数字的“超能力”。 |
一个容易出错的小地方
在第二行(替换行)中,我们通常使用 $1 或 \1 来引用捕获的内容。
有些软件习惯用 $1, $2。
有些软件(如早期的编辑器或特定的编程环境)习惯用 \1, \2。
如果你发现用 $1 没反应,可以试着换成 \1。
您现在对这个“翻译官” \ 的用法理解了吗?还需要我解释一下其他符号(比如 .*? 或 ^ $)的作用吗?