Skip to content

魔法匹配和魔法变量

Cp0204 edited this page Sep 1, 2025 · 17 revisions

魔法匹配

在正则处理中,我们定义了一些“魔法匹配”模式,如果 表达式 的值以 $ 开头且 替换式 留空,程序将自动使用预设的正则表达式进行匹配和替换。

以下是一个内置示例:

"magic_regex": {
  "$TV": {
    "pattern": ".*?(?<!\\d)([Ss]\\d{1,2})?([Ee]?[Pp]?[Xx]?\\d{1,3})(?!\\d).*?\\.(mp4|mkv)",
    "replace": "\\1\\2.\\3"
  }
}

如果填入 $TV ,这将使用对应的正则表达式,这个表达式可以自动适配和整理市面上 90%分享剧集的文件名格式。

其中分为三个编组:

  1. ([Ss]\\d{1,2}) 捕获季,替换中使用 \1 引用
  2. ([Ee]?[Pp]?[Xx]?\\d{1,3}) 捕获集数,替换中使用 \2 引用
  3. (mp4|mkv) 捕获后缀,替换中使用 \3 引用

你可以在 WebUI 中自定义魔法匹配规则。

魔法变量

v0.6.0+ 版本开始支持

在正则替换表达式中,我们支持使用一系列 {} 变量,我称之为“魔法变量”,这使得在替换时可以更灵活地插入相关内容。

也就是说,正则匹配式可以不用填(也可以填写用来匹配和过滤,不冲突),直接在替换式填变量,就可以比较智能地命名。

例如 {TASKNAME}.{SXX}E{E}.{EXT}黑镜.S01E01.mp4

变量 描述 示例值
{TASKNAME} 任务名称,从任务配置中获取
{II} 排序序号,几个 I 即几位数,替换后命名中要有规律字符以供排序 01 02 001 002
{EXT} 文件扩展名,从文件名中提取 txt mp4 jpg
{CHINESE} 两个或以上中文汉字,从文件名中捕获 黑镜 奔跑吧
{DATE} 日期,从文件名中捕获,格式化后输出 YYYYMMDD 20231026
{YEAR} 匹配年份,从文件名中捕获 1874 2025
{S} 季数字,从文件名中捕获 01 02
{SXX} 含 S 的季字符串,从文件名中捕获,如无捕获则为 S01 S01 S02
{E} 集数字,从文件名中捕获 1 01 123
{PART} "上/中/下" 或者 "一/二/三/...十" 等表示部分的字符
{VER} "版" 结尾的中文字符,从文件名中捕获 高清版 完整版

备注

  1. 如果匹配式中填了内容,需要把整个文件名匹配全,否则只替换匹配的部分

    案例1:源文件名AAA.S02E03.HQ.mp4 想筛选出含 HQ 的,匹配式填 HQ 替换式填{SXX}E{E}.{EXT} 将会变成 AAA.S02E03.S02E03.mp4.mp4
    因为只有 HQ 替换成了 {SXX}E{E}.{EXT} ,应该前后加入 .*? 把前后的字符也匹配上,如:.*?HQ.*?

  2. {II} 模式需要文件列表完整、匹配式中筛选仅需的文件、加入可排序的字符,例如日期、集数,才会有比较好的效果
  3. {CHINESE} 只匹配第一次出现的两个以上中文汉字,如果用作电影或剧集名,不一定符合期望,建议用 {TASKNAME}
  4. $TASKNAME 已弃用,改用 {TASKNAME} ,升级0.6.0后任务参数的替换式应该会自动处理好,魔法匹配中需要自行处理

最佳实践

剧集

  • 任务名称: 黑镜
  • 匹配式: .*?(mp4|mkv) (筛选出视频文件)
  • 替换式: {TASKNAME}.{SXX}E{E}.{EXT}
  • 替换效果: 黑镜.S01E01.mp4

综艺

  • 任务名称: 奔跑吧
  • 匹配式: ^(?!.*纯享)(?!.*加更)(?!.*超前企划)(?!.*训练室)(?!.*蒸蒸日上)(?!.*抢先看).*?(第\d+期).*
    • (?!.*纯享) 为过滤词,可以叠加
    • (第\d+期) 为筛选词,作用匹配出带“第xx期”的文件,只有这部分文件参与{II}的排序
  • 替换式: {TASKNAME}.{SXX}E{II}.\1{PART}.{EXT}
  • 替换效果: 奔跑吧.S01E01.第6期上.mp4

Clone this wiki locally