正则表达式的重命名

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.$4

3.保留所有元数据,只在前面加入中文名

第一行 (源文件名正则表达式):

^(.*)$

第二行 (新文件名正则表达式):

[您的中文名称].$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.$4

7. 改标准名

示例:神墓 - 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

您现在对这个“翻译官” \ 的用法理解了吗?还需要我解释一下其他符号(比如 .*?^ $)的作用吗?

标签: none

添加新评论