深色模式
自定义捕获词
用正则从文件名里抓取片段,作为变量注入命名模板;不写变量名则进入默认捕获字段。
前置条件
- 已在「文件整理 → 词表 → 捕获词」编辑
custom_captures。 - 每行一个捕获规则;正则需可编译。
- 捕获到的变量要在重命名模板里用
或引用,否则不会出现在最终文件名里。
详细规则
执行时机
捕获词在名称解析阶段执行,位置固定:
text
原始文件名
-> 自定义识别词预处理
-> 内嵌 TMDB / 季集 / 类型信息提取
-> 名称解析、TMDB / 豆瓣 / OpenAI 辅助识别
-> 自定义制作组识别
-> 自定义捕获词识别 ← 这里
-> 重命名模板渲染
-> 渲染后处理词清理
-> 输出目标路径两点含义:
- 捕获词用的是识别词处理之后的标题,因此识别词里已删除的噪声不会再被捕获。
- 捕获结果只影响模板变量,不参与媒体识别:不会改变 TMDB 匹配、季集判定或分类结果。
四种写法
| 写法 | 形式 | 结果去向 |
|---|---|---|
| 纯正则 | (?i)IMAX | 默认字段 |
| 命名捕获 | 正则 >> 变量名 | |
| 条件替换 | 正则 >> 变量名 => 替换值 | ,值固定为替换文本 |
| 自定义分隔符 | 正则 >> 变量名 @ 分隔符 | ,多值用该分隔符连接 |
解析顺序(重要)
一行规则的解析是固定顺序的,写错位置会得到意外结果:
text
1) 按第一个 " >> " 切分:左边是正则,右边是「变量区」
2) 在「变量区」里找第一个 " => ":左边仍是变量区,右边是替换文本
3) 在剩下的变量区里找最后一个 " @":它后面是分隔符,前面是变量名因此分隔符必须写在 => 之前:
text
正确:正则 >> editionTags @. => 收藏版
错误:正则 >> editionTags => 收藏版 @.错误写法里 @. 会被当成替换文本的一部分,变量值变成 收藏版 @.。
分隔符必须带前导空格
分隔符的识别依据是 " @"(空格 + @)。写成 变量名@.(没有空格)不会被识别成分隔符,整串会被当成变量名。
取值规则
- 正则里有捕获组时,取第一个非空捕获组的值。
- 正则里没有捕获组时,取整个匹配文本。
- 若捕获组全部为空,该次命中被跳过(不会写入空值)。
多个捕获组时按"第一个非空"取值:
text
(?i)(HDR10\+)|(HDR10)|(DV) >> effectTag命中 HDR10 时,第一组为空、第二组命中,取 HDR10。
无捕获组时取整体匹配:
text
(?i)Director'?s[ ._-]?Cut >> cutVersion多值去重与分隔符
同一变量被多条规则、或同一条规则多次命中时,值会按字符串精确去重后依次追加;连接用的分隔符取第一条创建该变量的规则里写的分隔符。
text
(?i)(IMAX|REMUX|IMAX) >> editionTag输入 Movie.IMAX.REMUX.IMAX.mkv → editionTag = IMAX@REMUX(IMAX 不重复追加)。
配合自定义分隔符:
text
(?i)(IMAX|REMUX|UHD) >> editionTags @.结果形如 IMAX.REMUX。
默认字段 customCapture
不写 >> 的规则(或 >> 后变量名为空)写入默认字段,模板里用 引用。多条默认规则会累计:
text
IMAX
REMUX
Atmos结果:
text
customCapture = IMAX@REMUX@Atmos条件替换
=> 的语义是固定写入值,不做捕获组展开:
text
(?i)REMUX >> qualityTag => BluRay.REMUX
(?i)(DV|DoVi|Dolby Vision) >> effectTag => DV只要命中,变量值就统一是箭头右侧的文本;同一变量多条规则时,按去重规则合并。
变量名约束
- 建议只用英文字母、数字、下划线。
- 不要与内置字段重名(如
title、year、releaseGroup、videoCodec等)。重名时不会覆盖内置值,等于规则白写。 - 变量名必须写在
>>之后才会成为命名变量;>>之前的内容始终是正则。
常见用途
版本标签
text
(?i)(IMAX|REMUX|UHD|Criterion) >> editionTag
(?i)(Director'?s Cut|Extended Cut|Theatrical Cut|Unrated) >> cutVersion模板:
jinja
{{ editionTag }}.{{ cutVersion }}字幕标签
text
(?i)(CHS|CHT|CHS&CHT|简中|繁中) >> subtitleTag
(?i)(Hardsub|Softsub|内封|外挂) >> subtitleMode动漫发布标签
text
\[(ANi|Lilith-Raws|NC-Raws|LoliHouse)\] >> animeSource
\[(Baha|CR|WEB-DL)\] >> animePlatform
\[(1080p|2160p)\] >> animePix特效与音频补充
text
(?i)(DV|DoVi|Dolby Vision) >> effectTag => DV
(?i)(HDR10\+|HDR10|HLG) >> effectTag
(?i)(Atmos|TrueHD|DTS-HD MA|FLAC) >> audioTag自定义来源标记
webSource 是内置解析字段,不能靠捕获词改写。如果只是想把文件名里的特殊来源标记保留到自己的变量:
text
(?i)(WEB-DL|WEBRip|BluRay|REMUX) >> sourceTag模板里写 。这不会改变内置 webSource 的识别逻辑。
多段清晰度/帧率标记
text
(?i)(2160p|1080p|720p) >> pixelTag
(?i)(60fps|50fps|24fps) >> fpsTag与制作组、渲染后处理词的分工
| 词表 | 阶段 | 结果去向 | 典型用途 |
|---|---|---|---|
| 自定义制作组 | 名称解析中 | 内置字段 releaseGroup | 识别压制组 / 字幕组 |
| 自定义捕获词 | 名称解析中 | customCapture 或自定义变量 | 抓取版本、字幕、来源等标签 |
| 渲染后处理词 | 模板渲染后 | 直接改写最终路径 | 清理多余符号、统一大小写 |
需要"把标签拼进文件名"用捕获词;需要"把已经拼好的文件名再修一遍"用渲染后处理词。
正则引擎与转义
- 引擎优先用 RE2(Go 标准正则);当正则包含 RE2 不支持的语法(如 lookaround
(?<=…)、(?=…))时,整条规则自动回退到 regexp2 执行。 - 捕获组、
\1之类的反向引用在替换文本里使用;替换文本支持\1–\9、\g<name>、\\、\n等转义。 - 替换文本里的
$不具备变量含义,需要输出字面量$时请写$$。
完整配置示例
text
# 版本与剪辑
(?i)(IMAX|REMUX|UHD|Criterion) >> editionTag
(?i)(Director'?s Cut|Extended Cut|Unrated) >> cutVersion
# 特效与音频
(?i)(HDR10\+|HDR10|HLG) >> effectTag
(?i)(DV|DoVi|Dolby Vision) >> effectTag => DV
(?i)(Atmos|TrueHD|DTS-HD MA|FLAC) >> audioTag
# 字幕
(?i)(CHS|CHT|简中|繁中) >> subtitleTag
# 动漫发布组(写在方括号里)
\[(ANi|Lilith-Raws|NC-Raws|LoliHouse)\] >> animeSource
# 默认字段累计
IMAX
REMUX
Atmos对应的模板片段:
jinja
{{ title }} ({{ year }})/{{ title }}.{{ editionTag }}.{{ effectTag }}.{{ audioTag }}-{{ customCapture }}{{ fileExt }}校验与排错
| 现象 | 原因 | 处理 |
|---|---|---|
| 报「无法解析规则(正则为空)」 | >> 左边是空的 | 补上正则 |
| 变量没有出现在文件名里 | 模板没引用该变量 | 在模板里加 |
| 变量值总是固定文本 | 用了 => 替换值 | 这是预期行为,去掉 => 即可保留原文 |
| 分隔符没生效 | 分隔符没写在 => 之前,或缺少前导空格 | 改成 >> 变量名 @. => 替换 |
| 变量名写成了中文/带空格而模板取不到 | 变量名建议只用字母数字下划线 | 改用英文变量名 |
lookaround 规则报错 | 正则同时不被 RE2 与 regexp2 接受 | 用「立即校验」定位语法错误 |
使用流程
- 在捕获词文本框按行填写规则。
- 点「立即校验」检查正则语法。
- 点「保存捕获词」写盘。
- 在重命名模板中引用变量名或
。 - 用「名称识别测试」跑一个真实文件名,确认变量值符合预期。
常见问题
同一变量命中多次会怎样?
TIP
按分隔符去重后连接,默认分隔符是 @;如需换成别的,写成 >> 变量名 @ 分隔符(分隔符要在 => 之前)。
=> 替换值 和命名模板里的替换有什么区别?
TIP
捕获词的 => 只把该变量命中的值统一替换为固定值,属于识别阶段,不做捕获组展开;命名模板里的替换发生在渲染阶段,两者用途不同。
不写变量名会捕获到哪里?
TIP
进入默认捕获字段,模板里用 引用。
为什么捕获到的值和预期不一样?
TIP
先确认正则有没有加 (?i)(默认区分大小写),再确认捕获组是否写全。取的是第一个非空捕获组,多组时不是"最长的那个"。
可以用捕获词改变季集识别吗?
TIP
不可以。季集识别发生在捕获词之前,需要修正季集请用自定义识别词的偏移或指定 TMDB 写法。
变量名和内置字段重名会怎样?
TIP
不会覆盖内置值,等于规则无效。请换一个自定义名称(例如把 videoCodec 改成 myVideoCodec)。