- 工作流自动化
- 任务调度
- 桌面应用
【免费下载链接】AUTO-MAS
多脚本多配置统一管理与自动化工具 | 轻松管理大量脚本并存储多个用户配置、设计自动化任务流、监看脚本日志,大幅提高自动化代理效率与稳定性!
AUTO-MAS 是一款多脚本多配置统一管理与自动化工具,它的表达式引擎(extract expression)让你在日志监控、推送采集与任务成败判定中,用一行$()语法加内置函数链,就能把"复杂调度条件"写进自动化任务流。本文面向新手,用真实游戏日志带你快速上手:从最基础的提取语法,到环视排除、多字段拼接、多行聚合等 7 个进阶技巧,并给出常见坑与调试路径,让你少走弯路。
一、表达式引擎在哪里发挥作用?
AUTO-MAS 的表达式引擎(源码位于 app/utils/expression/)为自动化任务流提供三种核心能力:
- 推送日志采集:规则先用「匹配正则」过滤日志行,再用
$()提取表达式精确取出要推送的字段。各游戏任务内置的采集规则可参考 app/task/ZzzOd/push_log.py、app/task/MaaEnd/push_log.py; - 多行聚合:跨越多行的任务信息(如 BetterGI 一条龙任务),用起始/结束正则圈定「窗口」,再在窗口里提取并拼接字段;
- 成功/失败标志匹配:
Script.SuccessLog/Script.ErrorLog配置按 Split(关键字包含)或 Regex(正则)模式判定任务成败,是调度器里最常用的「调度条件」之一,实现见 app/utils/LogPatternExtractor.py。
二、先搞懂$()语法与 3 种拼接
$(正则):正则提取作用域。只有捕获组()里的内容才会被提取,多个捕获组按顺序用换行拼接;"文本":字面量,原样输出,支持\"、\\、\n、\t转义,常用于加前缀/后缀;+:同行拼接——左右片段拼在同一行;;:换行拼接——左右片段各占一行。
⚠️ 关键规则:同一行内所有
$()必须全部命中,该行才会输出;任一未命中则整行跳过。这正是"复杂调度条件"的实现基础。
以 ZzzOd(绝区零一条龙)的采集规则为例,app/task/ZzzOd/push_log.py 中的写法:
匹配正则:指令\[ (.+?) \] 执行成功 提取表达式:"OK:体力刷本|🔋" + $((?:返回状态 剩余电量 )(\d+))命中指令[ 体力刷本 ] 执行成功 返回状态 剩余电量 187时,输出OK:体力刷本|🔋187。
三、技巧一:函数链——正则取不到的,用内置函数"掐头去尾"
AUTO-MAS 表达式内置 9 个文本处理函数,可像 Excel 函数一样用.串联成函数链。核心思路:用正则负责「圈出字段」,用函数负责「改写字段」。
| 函数 | 用法 | 说明 |
|---|---|---|
cut | .cut(num) | 切除首尾字符,正数去头、负数去尾 |
get | .get(num) | 保留首尾字符,正数留头、负数留尾 |
sub | .sub(start, end) | 提取两位置间文本,从 1 计数,负数倒数 |
cutby | .cutby("定位文本", 0/1, 0/1, 序号) | 按文本定位截断:去头/去尾、留/删定位文本、第几次出现 |
subby | .subby("首", "末", 0/1, 0/1, 序号, 序号) | 提取两段文本之间的内容 |
replace | .replace("旧", "新") | 替换子串 |
trim | .trim() | 去除首尾空白 |
upper/lower | .upper()/.lower() | 英文转大写 / 小写 |
可选参数都可省略;定位文本找不到时函数会跳过处理、返回原文,不会报错。
当正则不好写时,可以让$()取整行文本,再衔接函数链定位截断。例如从指令[ 咖啡店 ] 执行成功 返回状态 无需运行中提取指令名:
"✓ "+$().cutby("指令[ ",0,1).cutby(" ]",1,1)$()→ 获取整行(可多次复用).cutby("指令[ ",0,1)→ 去头并删掉定位文本,得咖啡店 ] 执行成功 返回状态 无需运行.cutby(" ]",1,1)→ 去尾到],得咖啡店"✓ "+→ 拼前缀,最终✓ 咖啡店
进阶:逐行前缀。当一个$()提取出多行结果时,字面量前缀只会加在第一行。用replace("\n","\n⏸")把每个换行替换成「换行+前缀」,再在开头补一个前缀即可:
"⏸"+$('([^']+)').replace("\n","\n⏸")命中未处理的任务列表 ['买信用商店', '刷体力', '活动奖励']时,逐行输出⏸买信用商店、⏸刷体力、⏸活动奖励。
四、技巧二:把"排除条件"写进调度——环视一次排除多个节点
很多调度需求本质是"只要 A,但要排除 B、C"。用否定先行(?!...)可在匹配正则里一次性排除多个不想要的节点(源码 app/utils/LogPatternExtractor.py 中匹配正则采用search语义):
匹配正则:指令\[(?!\s*(?:等待大世界画面|返回大世界|前往菜单|体力刷本)).+?\] 执行成功 提取表达式:"✓ "+$(指令\[\s*(.+?)\s*\] 执行成功)(?!\s*(?:...))一次性排除导航/过渡节点,推送里不再出现返回大世界这类噪音;- 可排除的名单随你的调度需求任意增减,无需改动其他配置;
- 坑位提示:可选空格要放进环视内部写成
(?!\s*通知),写成\s*(?!通知)会因\s*回溯到 0 而失效。
失败行带原因:同行拼接两个$(),全部命中才输出:
"✗ "+$(指令\[\s*(.+?)\s*\] 执行失败)+" "+$(返回状态\s+(.+))输出✗ 切换账号 未配置账号密码。两个片段中任一未命中,整行跳过——这本身就是一条"必须同时满足"的复合调度条件。
针对特定节点单独配置:
匹配正则:体力刷本.+执行成功 提取表达式:"✓ 体力刷本 剩余电量 "+$(剩余电量\s+(\d+)).+执行成功精准命中"执行成功"行,跳过同名的"节点"行;指令名用字面量写死,只动态提取剩余电量后的数字。
五、技巧三:多行聚合——跨行信息拼成一条推送
单行模式一行一行处理,但许多任务的关键信息分散在多行。用「起始正则 + 结束正则」圈定一个窗口,窗口关闭后把整段内容交给提取表达式:
提取表达式:$((一条龙任务执行: \d+/\d+))+" -> "+$((邮件:[^\n]+));$((任务结束))$()提取任务进度,$()提取邮件内容,用+拼在同一行;$()提取结束标记,;让其独占一行;- 窗口内的噪声行(如
地图特征点加载完成!)因未命中任何片段被自动过滤。
同一时刻只允许一个窗口打开,所以一条龙日志里的 1/4~4/4 四段任务,一条规则会自动产出 4 条结果。
六、技巧四到六:3 个最常见的坑(附正确写法)
⚠️ 坑 1:裸文本不生效
提取表达式中,正则必须用$()包裹:
指令[ 咖啡店 ] 执行成功 ✗ 裸文本,不会被识别 $(指令\[\s*(.+?)\s*\] 执行成功) ✓ 正确⚠️ 坑 2:无捕获组没有输出
$()内正则若没有捕获组,只会匹配、不提取,返回空串导致该行不输出:
$(任务结束) ✗ 无捕获组,返回 "" $((任务结束)) ✓ 用捕获组包裹整段正则⚠️ 坑 3:.默认跨行贪吃
$()内正则默认开启DOTALL(源码 app/utils/expression/evaluator.py),.会跨行:
$((邮件:.+)) ✗ 会吞掉后面的所有行 $((邮件:[^\n]+)) ✓ 只取邮件这一行此外,提取结果"多了"或"少了",多半是贪婪问题——把+/*换成非贪婪的+?/*?。
七、完整调试流程:先过滤、再提取、后验证
- 先只配匹配正则(提取表达式留空),确认要处理的行被正确过滤出来;
- 再填提取表达式,用
$()包住要提取的部分; - 用规则旁的 🐛调试按钮粘贴真实日志行,即时验证每一行的命中/未命中状态;
- 结果不对时:多了 → 试非贪婪
+?;少了 → 检查捕获组与环视写法。
规则编辑界面对应 frontend/src/views/EditView/Script/components/LogPatternRule.vue,内置文档弹窗对应 frontend/src/views/EditView/Script/LogPatternDocsModal.vue;校验与逐行调试入口在 app/utils/LogPatternExtractor.py 的
validate_pattern/debug_pattern函数。
八、核心路径速查表
| 模块 | 路径 |
|---|---|
| 表达式解析(语法 → AST) | app/utils/expression/parser.py |
| 表达式编译与求值 | app/utils/expression/evaluator.py |
| 9 个内置函数实现 | app/utils/expression/functions.py |
| 日志模式匹配器(split/regex/多行聚合/成败标志) | app/utils/LogPatternExtractor.py |
| 日志采集会话(规则注册、推送) | app/log_box/collect.py |
| 内置采集规则示例(ZzzOd) | app/task/ZzzOd/push_log.py |
| 内置采集规则示例(MaaEnd) | app/task/MaaEnd/push_log.py |
| 成功/失败标志配置项 | app/models/config.py |
小结 🎯
记住三句话:$()圈字段、函数链改字段、(?!...)写排除。掌握$()+ 内置函数 + 环视排除 + 多行聚合这四件套,你就能把绝大多数复杂调度条件写进 AUTO-MAS 的自动化任务流,让推送报告干净、精准、稳定。
- 工作流自动化
- 任务调度
- 桌面应用
【免费下载链接】AUTO-MAS
多脚本多配置统一管理与自动化工具 | 轻松管理大量脚本并存储多个用户配置、设计自动化任务流、监看脚本日志,大幅提高自动化代理效率与稳定性!
相关推荐
Synology Video Info Plugin:群晖影视信息插件完整解决方案
Synology Video Info Plugin:群晖影视信息插件完整解决方案 你是否厌倦了群晖Video Station有限的影视信息源?Synology
网页爬虫视频Windows Terminal终极指南:从传统控制台到现代化终端的完整进化
Windows Terminal终极指南:从传统控制台到现代化终端的完整进化 还在为Windows命令行体验的局限性而烦恼吗?传统CMD和PowerShell的
桌面应用CLI四种方法对比:ExplorerPatcher安全卸载与Windows原装界面恢复实操
四种方法对比:ExplorerPatcher安全卸载与Windows原装界面恢复实操 本文带你走完ExplorerPatcher卸载与恢复的完整流程:从备份配置
桌面应用逆向工程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考