Skip to content

🧩 正则匹配(进阶) ​

本页讲正则规则:用一条表达式匹配一批标题,避免逐条写精确名称。

有操作难度,建议先确认真的需要

正则规则适合「一批标题共享命名规律」的场景。如果你的问题只是个别几个标题对不上,用 简单精确映射 逐条添加更快、更不容易出错。

本页假定你已经知道正则是什么。完全没接触过请先看 正则入门(新手)。

什么时候该用正则 ​

场景适合正则?
只有两三个标题对不上❌ 用精确映射
一个系列有十几部,标题都以「XX之刃」结尾✅ 适合
标题带各种清晰度/字幕组后缀,需要先剥掉✅ 适合
标题差异没有规律❌ 用精确映射或候选确认

怎么添加 ​

  1. 打开 「映射管理」,点添加映射。
  2. 类型选 「正则规则」。
  3. 填写三项:
    • 正则表达式:Python 正则语法。
    • Bangumi ID:命中后要使用的条目 ID。
    • 限定季度(可选):填了则规则只在指定季生效。
    • 说明(可选):给自己看的备注。
  4. 用页面底部的 「正则匹配测试」 输入几个真实标题验证。
  5. 保存。

匹配行为(重要) ​

理解这几点能避免大多数「为什么没生效」:

  1. 匹配对象是标题和原始标题,两者都会尝试;任一命中即可。原始标题即媒体库给出的原标题(常为英文/日文原名)。
  2. 按列表顺序,第一条命中的规则生效。因此:
    • 更具体的规则要写在更靠前;
    • 兜底用的宽泛规则放最后。
  3. 使用的是「搜索」而非「完全匹配」。除非你写 ^...$ 锚定首尾,否则只要标题包含该模式就算命中 —— 这既是最常见的好用之处,也是最常见的误伤原因。
  4. 限定季度填了就只在那一季生效;留空对所有季生效。
  5. 表达式语法错误或匹配超时(超过 1 秒)的规则会被跳过并记入日志,不会让同步整体失败。

正则速查(Python 语法) ​

写法含义例子
.任意单个字符第.季 匹配「第1季」「第X季」
*前面的内容重复 0 次或多次之刃*
+前面的内容重复 1 次或多次第[0-9]+季
?前面的内容可有可无剧场版?
[abc]括号内任一字符[一二三]季
[0-9]数字;等价于 \d第[0-9]季
^字符串开头^鬼灭
$字符串结尾之刃$
|或剧场版|电影版
(...)分组(第[0-9]+季)
(?i)忽略大小写(?i)blade

中文标点也要考虑

中文标题里常出现全角括号 ()、中点 ·、空格等。如果标题里确实有,表达式里也要写,或者用 . 代替单个字符。

常用范例 ​

1. 系列作:标题以某词结尾 ​

regex
^.*之刃$
  • ^ 开头、$ 结尾 → 要求整个标题以「之刃」结束。
  • .* 表示前面可以是任意内容。
  • 命中:「鬼灭之刃」,不命中:「鬼灭之刃 无限列车篇」。

若想连后续篇一起覆盖,去掉 $:

regex
^.*之刃

2. 一部作品的所有季度与剧场版 ​

regex
某番剧.*

只要标题以「某番剧」开头就命中,无论后面跟的是「第二季」「剧场版」还是别的。

注意误伤

这种宽泛写法也会命中你不想要的条目(比如真人版、衍生作)。务必用「正则匹配测试」把你媒体库里的真实标题都试一遍。

3. 同时覆盖多种叫法 ​

regex
(鬼灭之刃|滅之刃|Kimetsu no Yaiba)

用 | 把几种写法并列,任一个出现即命中。适合处理译名不统一。

4. 标题里带季号,但格式不一 ​

regex
^某番剧\s*第[0-9一二三四五六七八九十]+季
  • \s* 表示「可以有任意多个空白字符,也可以没有」;
  • [0-9一二三四五六七八九十]+ 同时接受阿拉伯数字和中文数字。

5. 只匹配某一季(配合「限定季度」) ​

如果你已经用「限定季度」字段限定了季数,正则本身就不必再判断季号:

regex
^某番剧

限定季度填 2 → 只有第 2 季的请求会命中。

6. 忽略大小写 ​

regex
(?i)^blade of demon slayer

(?i) 放在开头,让整个表达式忽略大小写,适合英文标题。

请务必先测试 ​

添加/编辑弹窗底部有 「正则匹配测试」:输入真实标题,立即看到是否命中。

建议的测试清单:

  1. 应该命中的标题 —— 至少 2 个真实样例;
  2. 不应该命中的相近标题 —— 至少 2 个(这是重点!);
  3. 你媒体库里同一系列的其它季,确认它们落到了你预期的规则上。

常见错误 ​

规则写了但没生效

按顺序排查:

  1. 顺序问题 —— 前面有一条更宽泛的规则先命中了。把更具体的规则往上移。
  2. 被精确映射抢先 —— 同名标题已存在精确映射时,精确映射优先级更高(见 匹配优先级)。
  3. 表达式语法错误 —— 查看日志里有没有「正则编译失败」;用测试面板验证。
  4. 限定季度填错 —— 填了季度的规则只对该季生效,换成你要的季或留空。
  5. 被屏蔽关键词拦下 —— 但注意:命中映射的标题会豁免屏蔽词,所以这条通常不是原因。
命中太多,误伤了别的番

几乎总是因为没有锚定首尾。检查:

  • 开头加 ^、结尾加 $(如果确实要求整串匹配);
  • 把 .* 收紧成更具体的模式;
  • 确认没有把兜底规则放在太靠前的位置。
想匹配「第 2 季」但季号写法太多

改用**「限定季度」**字段来限定季数,正则只负责匹配作品名。这比在正则里穷举各种季号写法可靠得多。

手改 JSON ​

正则规则也可以直接写在 bangumi_mapping.json 的 rules 数组里:

json
{
  "rules": [
    {
      "pattern": "^.*之刃$",
      "subject_id": "123456",
      "description": "鬼灭之刃系列"
    },
    {
      "pattern": "^某番剧",
      "subject_id": "789012",
      "season": 2,
      "description": "仅第 2 季"
    }
  ]
}
字段必填含义
pattern✅正则表达式(Python 语法)
subject_id✅命中后使用的 Bangumi 条目 ID
description备注,会显示在命中理由中
season限定季度;省略表示对所有季生效

数组顺序即优先级:靠前的先尝试。

接下来 ​