Skip to content

自定义捕获词 ​

用正则从文件名里抓取片段,作为变量注入命名模板;不写变量名则进入默认捕获字段。

变量捕获自定义分隔符捕获替换多值去重RE2 / regexp2

前置条件 ​

  • 已在「文件整理 → 词表 → 捕获词」编辑 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 接受用「立即校验」定位语法错误

使用流程 ​

  1. 在捕获词文本框按行填写规则。
  2. 点「立即校验」检查正则语法。
  3. 点「保存捕获词」写盘。
  4. 在重命名模板中引用变量名或 。
  5. 用「名称识别测试」跑一个真实文件名,确认变量值符合预期。

常见问题 ​

同一变量命中多次会怎样? ​

TIP

按分隔符去重后连接,默认分隔符是 @;如需换成别的,写成 >> 变量名 @ 分隔符(分隔符要在 => 之前)。

=> 替换值 和命名模板里的替换有什么区别? ​

TIP

捕获词的 => 只把该变量命中的值统一替换为固定值,属于识别阶段,不做捕获组展开;命名模板里的替换发生在渲染阶段,两者用途不同。

不写变量名会捕获到哪里? ​

TIP

进入默认捕获字段,模板里用 引用。

为什么捕获到的值和预期不一样? ​

TIP

先确认正则有没有加 (?i)(默认区分大小写),再确认捕获组是否写全。取的是第一个非空捕获组,多组时不是"最长的那个"。

可以用捕获词改变季集识别吗? ​

TIP

不可以。季集识别发生在捕获词之前,需要修正季集请用自定义识别词的偏移或指定 TMDB 写法。

变量名和内置字段重名会怎样? ​

TIP

不会覆盖内置值,等于规则无效。请换一个自定义名称(例如把 videoCodec 改成 myVideoCodec)。

NanShare 文档站仅说明 NanShare 项目的部署、配置与使用。