You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串匹配逻辑异常:两条START SUITE记录无法正确区分的问题

问题描述

有两条动态获取的记录需要通过字符串匹配区分:

Record1 : START SUITE: Android [ ]
Record2 : START SUITE: Android.Test the user dashboard [ ]

预期逻辑:

  • 包含Android [ ]的Record1,设置new_record["name"] = "A"
  • 包含Android.的Record2,设置new_record["name"] = "B"

当前使用的Lua判断代码:

if  record.message ~= nil and string.match(record.message, "START SUITE: Android[ ]") then
    new_record["name"] = "A"
    if string.match(record.message, "START SUITE: Android.") then
        getname(record.message)
        new_record["name"] = "B"
    end
end

问题:Record1不符合第二个判断条件却进入了分支,被错误设置为name="B"。

解决方案

核心问题是Lua正则表达式中,.是通配符,会匹配任意单个字符(包括空格)。Record1里Android后的空格刚好被Android.中的.匹配,导致第二个条件误触发。

修正方案一:转义特殊字符,精确匹配

把正则中的.转义为%.(匹配字面量点号),同时转义[和]为%[、%],并调整判断顺序优先匹配更具体的Record2:

if record.message ~= nil then
    if string.match(record.message, "START SUITE: Android%.") then
        getname(record.message)
        new_record["name"] = "B"
    elseif string.match(record.message, "START SUITE: Android%[ %]") then
        new_record["name"] = "A"
    end
end

修正方案二:默认值+覆盖逻辑

先设置默认值为"A",仅当匹配到点号时才改为"B",逻辑更简洁:

if record.message ~= nil then
    new_record["name"] = "A"
    if string.match(record.message, "START SUITE: Android%.") then
        getname(record.message)
        new_record["name"] = "B"
    end
end

内容的提问来源于stack exchange,提问作者Zain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:05:23