Skip to content

正则处理教程

Cp0204 edited this page Nov 3, 2024 · 1 revision

正则处理教程

夸克网盘自动转存项目中,正则表达式(Regex)被广泛应用于文件名的匹配和替换。通过使用正则表达式,我们可以灵活地处理各种格式的文件名,确保文件在转存时能够按照预期的格式进行筛选和整理。本文将详细介绍如何使用正则表达式进行文件名处理,并提供一些示例。

1. 正则表达式基础

正则表达式是一种用于匹配字符串的模式。它可以用来查找、替换和验证字符串。以下是一些常用的正则表达式符号:

  • .:匹配任意单个字符
  • *:匹配前面的字符零次或多次
  • ?:匹配前面的字符零次或一次
  • \d:匹配数字(0-9)
  • ^:匹配字符串的开头
  • $:匹配字符串的结尾
  • ():用于分组,提取匹配的子串

更多知识建议阅读:正则表达式30分钟入门教程

2.正则表达式使用

以下是一些正则表达式的示例及其效果:

pattern replace 效果
.* 无脑转存所有文件,不整理
\.mp4$ 转存所有 .mp4 后缀的文件
^【电影TT】花好月圆(\d+)\.(mp4|mkv) \1.\2 【电影TT】花好月圆01.mp4 → 01.mp4
【电影TT】花好月圆02.mkv → 02.mkv
^(\d+)\.mp4 S02E\1.mp4 01.mp4 → S02E01.mp4
02.mp4 → S02E02.mp4
$TV “魔法匹配”剧集文件
^(\d+)\.mp4 $TASKNAME.S02E\1.mp4 01.mp4 → 任务名.S02E01.mp4

2.1 魔法匹配

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

以下是一个内置示例:

"magic_regex": {
    "$TV": {
        "pattern": ".*?(S\\d{1,2}E)?P?(\\d{1,3}).*?\\.(mp4|mkv)",
        "replace": "\\1\\2.\\3"
    }
}

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

2.2 自定义魔法匹配

你可以在 config.json 中自定义魔法匹配规则,例如:

"magic_regex": {
    "$TV": {
        "pattern": ".*?(S\\d{1,2}E)?P?(\\d{1,3}).*?\\.(mp4|mkv)",
        "replace": "\\1\\2.\\3"
    },
    "$MOVIE": {    // 自定义电影匹配
        "pattern": "^(.*?)[\\s._-]*\\(?(\\d{4})\\)?[\\s._-]*(\\w+)?\\.(mp4|mkv|avi|mov|flv|wmv)$",
        "replace": "\\1.\\2.\\4"
    }
}

Important

特别提示,你可能遇到的一些坑:

  • 直接写 json 配置注意\多加一重字符转义:如\d写作\\d,匹配字符.写作\\.
  • 替换的后向引用:有些语言写作$1,Python中写作\1,json 转义后为\\1

3. 变量支持

在正则替换表达式中,我们支持使用 $TASKNAME 变量。这使得我们可以在替换时动态地插入任务名称。

这样可以根据不同的任务名称生成不同的文件名。例如:

任务名 花好月圆 ,替换式 $TASKNAME.S\1E\2.\3,替换效果 花好月圆.S01E01.mp4

结语

通过本教程,你应该已经了解了如何在夸克网盘自动转存项目中使用正则表达式来处理文件名。

通过灵活运用正则表达式,你可以实现对文件名的自动化整理,提高文件管理的效率。