深色模式
自定义识别词
在文件名识别前做替换、集数偏移或两者组合,让命名混乱的资源也能被正确解析。
前置条件
- 已在「文件整理 → 词表 → 识别词」编辑本地识别词(
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 集 2160ptext
输入:S01E13.2160p
规则:S01E <> \. >> EP-12
结果:S01E01.2160ptext
输入: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
被替换词 => 替换词 && 前定位词 <> 后定位词 >> 偏移表达式执行逻辑:
- 先做替换。替换未命中 → 整行不生效(不报错,标题保持原样)。
- 替换命中后再做偏移。偏移未命中 → 回退返回替换前的原文,替换结果也不会保留。
- 两步都命中才写回组合结果。
示例:
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.mkvWARNING
组合规则的 && 必须写成 &&,否则校验报错「替换加偏移规则中 && 两边缺少空格,正确格式: 被替换词 => 替换词 && 前定位词 <> 后定位词 >> 表达式」。
指定 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>。 - 要输出字面
$时忘记了写成$$。 - 规则顺序导致被后续行再次改写(逐行串行,前一条的结果会喂给下一条)。
使用流程
- 在识别词文本框按行填写规则。
- 点「立即校验」检查语法,错误会按行号提示(如「偏移量必须包含 EP 变量」)。
- 点「保存识别词」写盘;点「浏览识别词」可查看本地与远端生效词条。
- 识别时按「内置 → 本地 → 远端」顺序逐条应用,命中即改写标题。
常见问题
偏移表达式能用哪些运算符?
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 兼容写法。