Skip to content

自定义识别词 ​

在文件名识别前做替换、集数偏移或两者组合,让命名混乱的资源也能被正确解析。

替换集数偏移组合规则裸正则

前置条件 ​

  • 已在「文件整理 → 词表 → 识别词」编辑本地识别词(custom_identifiers)。
  • 规则按行书写,=>、<>、>>、&& 两侧都必须留空格。
  • 偏移表达式必须包含 EP 变量。
  • 需要多端共用时,可在「远程链接」中配置远端词库并启用。

详细规则 ​

执行时机 ​

识别词在整条识别链路中最先执行,改写后的标题会继续参与后续所有步骤:

text
原始文件名
  → 自定义识别词预处理
  → 内嵌 TMDB / 季集 / 类型提取
  → 名称解析 + TMDB / 豆瓣 / OpenAI 辅助识别
  → 自定义制作组识别(使用识别词替换后的标题)
  → 自定义捕获词识别
  → 重命名模板渲染
  → 渲染后处理词清理
  → 输出目标路径

书写约定 ​

  • 一行一条,空行忽略,# 开头为注释。
  • 默认区分大小写;需要忽略大小写时,在正则开头写 (?i)。
  • 替换箭头必须写成 =>;偏移分隔符必须写成 <> 与 >>;组合规则的 && 必须写成 &&。
  • 规则逐行串行执行:前一条改写后的标题会继续喂给下一条处理,直到最后一行。因此规则顺序敏感,宽泛的删除类规则建议放在后面。

四种写法与判定优先级 ​

系统按以下顺序自上而下判定,命中即按对应形态解释整行:

优先级写法触发条件语法
1组合同时包含 =>、&&、<>、>>被替换词 => 替换词 && 前定位词 <> 后定位词 >> 偏移表达式
2纯替换包含 =>被替换词 => 替换词
3纯偏移同时包含 " >> " 与 " <> "前定位词 <> 后定位词 >> 表达式
4裸正则以上都不满足单独一条正则

纯替换 ​

整行含 => 时按替换处理。合法写法只有两种:

  • 被替换词 => 替换词:两侧都带空格。
  • 被替换词 =>:行尾空替换,等价于删除被替换词。

如果写了 => 但两侧缺空格(如 被替换词=>替换词),校验会直接报错:

text
疑似替换词但 => 两边缺少空格,正确格式: 被替换词 => 替换词

典型用法:

text
庆余年 第二季 => 庆余年 S02
凡人修仙传 年番 => 凡人修仙传 S01
(?i)web[-_. ]?dl => WEB-DL
无水印 =>

=> 右侧是替换文本,支持捕获组与转义,详见下文「替换文本转义」小节。

裸正则 ​

整行不包含 =>、>>、<> 时,按裸正则处理:命中的内容会被直接删除。

text
PROPER
REPACK
\[.*?招募.*?\]
【.*?字幕组.*?】

TIP

删除发生在名称解析之前,仅影响识别用的标题文本,不等于最终文件名清理。最终输出路径里的多余符号请交给渲染后处理词。

纯偏移 ​

语法:

text
前定位词 <> 后定位词 >> 表达式
  • 前、后定位词都是正则,EP 代表当前匹配到的集数。
  • 前定位词或后定位词任一零命中,整条规则不生效。
  • 数字必须同时位于前定位词之后、后定位词之前才会被改写;数字的匹配正则是 [0-9一二三四五六七八九十]+,因此中文数字也能参与运算。
  • 匹配到的数字会替换表达式里的 EP,计算后再按原格式写回。

示例:

text
第 <> 集 >> EP+1
S01E <> 2160p >> EP-12
EP <> \. >> 2*EP+1
第 <> 话 >> EP+100

匹配结果示例:

text
输入:第 03 集 2160p
规则:第 <> 集 >> EP+1
结果:第 04 集 2160p
text
输入:S01E13.2160p
规则:S01E <> \. >> EP-12
结果:S01E01.2160p
text
输入:S01E03 2160p
规则:S01E <> 2160p >> 2*EP+1
结果:S01E07 2160p

中文数字同样支持,并按中文写回:

text
输入:第 三 话
规则:第 <> 话 >> EP+1
结果:第 四 话

数字回写规则 ​

  • 中文数字保持中文:第 三 话 偏移后写回 第 四 话。
  • 阿拉伯数字原串以 0 开头时保留补零写法:03 偏移 +1 后写回 04。
  • 同一行存在多处匹配时,替换从右到左执行,避免前面的替换改变位置后影响后面的匹配。

偏移表达式 ​

  • EP 会被替换为捕获到的数字,再交给表达式求值。
  • 支持的运算符:+ - * / %、括号、一元负号,例如 2*(EP+1)、-EP/2。
  • 表达式必须包含 EP 变量。
  • 整条表达式会先做字符集校验:(?i)^[\d+\-*/().EP ]+$。
  • 运行期可能的报错:
报错触发原因
偏移表达式除数不能为零表达式求值时出现除零
偏移表达式括号不匹配表达式括号不成对

替换加偏移组合 ​

语法:

text
被替换词 => 替换词 && 前定位词 <> 后定位词 >> 偏移表达式

执行逻辑:

  1. 先做替换。替换未命中 → 整行不生效(不报错,标题保持原样)。
  2. 替换命中后再做偏移。偏移未命中 → 回退返回替换前的原文,替换结果也不会保留。
  3. 两步都命中才写回组合结果。

示例:

text
第二季 => S02 && S02E <> \. >> EP-12
年番 => S01 && S01E <> 2160p >> EP+24
Part 2 => S01 && S01E <> \. >> EP+12

使用场景:

text
输入:庆余年 第二季 E13.2160p.mkv
规则:第二季 => S02 && S02E <> \. >> EP-12
结果:庆余年 S02 E01.2160p.mkv

WARNING

组合规则的 && 必须写成 &&,否则校验报错「替换加偏移规则中 && 两边缺少空格,正确格式: 被替换词 => 替换词 && 前定位词 <> 后定位词 >> 表达式」。

指定 TMDB ​

当标题容易被识别错时,可以把某段标题直接替换成 NanShare 支持的内嵌信息。组合格式:

text
被替换词 => {[tmdbid=ID;type=movie/tv;s=季;e=集]}

字段说明:

字段是否必填说明
tmdbid建议填写TMDB ID
type建议填写movie 或 tv;同时给出 ID 与类型时按该类型精确查询
s可选季数
e可选集数

示例:

text
JoJo's Bizarre Adventure.S01E01 => {[tmdbid=45790;type=tv;s=1;e=1]}
流浪地球2 => {[tmdbid=842675;type=movie]}

简单内嵌写法 ​

除组合格式外,替换词也可以直接写简单内嵌标记:

text
{tmdbid=123}
{tmdb-123}
{tmdb:123}
{doubanid=456}
{type=movie}
{type=tv}
{season=1}
{episode=1}

示例:

text
某冷门电影 => 某冷门电影 {tmdbid=123456} {type=movie}
某剧第二季第3集 => 某剧 {[tmdbid=654321;type=tv;s=2;e=3]}

捕获值计算 ​

{[...]} 中的 s / e 支持「捕获值 + @表达式」计算,常用于动漫分拆、单双集映射与特别篇偏移:

text
正则(捕获集数) => {[tmdbid=ID;type=tv;s=季;e=\1@表达式]}

@ 前的 \1 是正则捕获组,@ 后的表达式会接在捕获到的数字上参与运算,运算符与偏移表达式一致。

text
FAIRY TAIL - 100 YEARS QUEST - ([0-9][0-9]) => {[tmdbid=248947;type=tv;s=1;e=\1@*2+1]}

若捕获到 03:

text
\1 = 03
03@*2+1 → 3*2+1 → 7
最终 e = 7

更多写法:

text
Some.Anime.EP([0-9]{2}) => {[tmdbid=123456;type=tv;s=1;e=\1@+12]}
Special - ([0-9]{2}) => {[tmdbid=123456;type=tv;s=0;e=\1]}
Part([0-9]{2}) => {[tmdbid=123456;type=tv;s=1;e=\1@*2]}
第([0-9]+)话 => {[tmdbid=123456;type=tv;s=1;e=\1@-1]}

正则写法 ​

匹配部分、前定位词、后定位词都按正则解释,常用写法:

写法含义
(?i)忽略大小写
\d+一个或多个数字
[0-9]{2}两位数字
\s*任意空白
.*?非贪婪匹配任意字符
\b单词边界
text
(?i)web[-_. ]?dl => WEB-DL
(?i)\buhd\b => 2160p
\[[^\]]*招募[^\]]*\]
【[^】]*字幕组[^】]*】
第\s*([0-9]+)\s*话 => E\1

正则引擎 ​

  • 优先使用 Go 标准库 regexp(RE2 引擎),性能好、无回溯风险。
  • 当规则无法用 RE2 编译时(典型场景是 lookaround 断言 (?<=…)、(?<!…)、(?=…)、(?!…)),该条规则会整体回退到 regexp2 引擎。
  • 回退对写法透明,但建议只在必要时使用 lookaround。

替换文本转义 ​

=> 右侧替换文本支持以下转义:

写法含义
\1–\9引用第 1–9 个捕获组
\0整体匹配内容
\g<name>引用命名捕获组(如 (?P<ep>[0-9]+))
\\字面反斜杠
\a \f \n \r \t \v控制字符
$$字面 $

DANGER

捕获组请写 \1 或 \g<name>,不要写 $1;$ 不是捕获组语法,要输出字面 $ 必须写成 $$。未知转义会直接报错「不支持的替换转义 \x」(\x 为实际写的字符),\g 必须带名字写成 \g<name>。

校验与报错对照 ​

报错原文触发条件修正
疑似替换词但 => 两边缺少空格,正确格式: 被替换词 => 替换词行内含 => 但两侧缺空格改成 => 或行尾 =>
替换加偏移规则中 && 两边缺少空格,正确格式: 被替换词 => 替换词 && 前定位词 <> 后定位词 >> 表达式组合规则的 && 缺空格改成 &&
偏移量格式错误,应包含 EP 和运算符(如 EP+1、2*EP+1)表达式含字符集 (?i)^[\d+\-*/().EP ]+$ 以外的字符只保留数字、EP、运算符与括号
偏移量必须包含 EP 变量表达式没写 EP加入 EP,如 EP+1
偏移表达式除数不能为零表达式求值除零检查表达式与除数
偏移表达式括号不匹配表达式括号不成对补齐括号
不支持的替换转义 \x替换文本出现未知转义改用 \1 / \g<name> / $$ 等

排错清单 ​

整行规则没有生效

  • 组合写法要求替换先命中;替换不命中时整行被跳过。
  • 检查 =>、&&、<>、>> 是否都带空格:=> 与 && 缺空格会直接报错,<> 与 >> 缺空格则不会被识别为偏移写法(按优先级落入裸正则判定),通常表现为静默不生效。
  • 大小写不匹配会导致命中失败;需要忽略大小写时给正则加 (?i)。

集数偏移没反应

  • 前定位词或后定位词零命中(任一侧没匹配到,整条不生效)。
  • 数字不在前定位词之后、后定位词之前,被其他内容隔开。
  • 表达式没写 EP,或包含字符集外的字符被校验拦下。
  • <> 与 >> 两侧缺空格。

替换结果和预期不一致

  • 捕获组误写成 $1,应改为 \1 或 \g<name>。
  • 要输出字面 $ 时忘记了写成 $$。
  • 规则顺序导致被后续行再次改写(逐行串行,前一条的结果会喂给下一条)。

使用流程 ​

  1. 在识别词文本框按行填写规则。
  2. 点「立即校验」检查语法,错误会按行号提示(如「偏移量必须包含 EP 变量」)。
  3. 点「保存识别词」写盘;点「浏览识别词」可查看本地与远端生效词条。
  4. 识别时按「内置 → 本地 → 远端」顺序逐条应用,命中即改写标题。

常见问题 ​

偏移表达式能用哪些运算符? ​

TIP

支持 + - * / % 与括号,例如 EP+1、2*EP+1、(EP+1)/2。表达式必须包含 EP,且除数不能为零。

偏移会改动哪些数字? ​

TIP

只改写「前定位词之后、后定位词之前」的数字;中文数字与带前导零的写法会被保留原格式(如 三 写成 四,03 写成 04)。

=> 右侧留空是什么效果? ​

TIP

表示把左侧正则命中的内容替换为空,即删除。单独的裸正则与此等价。

为什么 => 没生效? ​

TIP

先检查箭头两侧空格。必须写成 被替换词 => 替换词;被替换词=>替换词 这类写法会直接报「疑似替换词但 => 两边缺少空格」。

识别词和渲染后处理词有什么区别? ​

TIP

识别词在名称解析前执行,会影响 TMDB 搜索、季集识别、制作组与捕获词匹配;渲染后处理词在模板渲染后执行,只影响最终输出路径。

指定 TMDB 后还会再去搜索吗? ​

TIP

替换命中后,会直接按内嵌 tmdbid 查询详情;同时指定 type 时按 movie 或 tv 精确类型查。

规则里能用 lookaround 吗? ​

TIP

可以。RE2 编译失败时会整条回退到 regexp2;但建议优先使用 RE2 兼容写法。

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