You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Lua脚本提取字符串中的testid-1与NM子串?

Lua字符串提取:获取方括号内容和Account Domain值

嘿,我来帮你搞定这个Lua字符串提取的问题!你之前尝试的写法没成功,主要是因为没掌握Lua模式匹配里的特殊字符转义规则——Lua里不是用\转义,而是用%来转义像[]这类特殊符号的,这和很多其他语言不一样。

正确的提取方法

我们分两步来提取你需要的内容:

1. 提取方括号内的testid-1

左括号[在Lua模式里是字符集的起始标记,属于特殊字符,必须用%[来匹配;同理右括号]要用%]。然后用(.*)捕获两个括号之间的所有内容,代码如下:

local str = "[testid-1] is locked out / / Subject: / Account Domain: NM /"
local test_id = string.match(str, "%[(.*)%]")

2. 提取Account Domain:后的NM

这里我们可以用两种思路匹配:

  • 方法一:匹配Account Domain: 后面的非空白字符(因为NM没有空格),用%S+匹配一个或多个非空白字符
  • 方法二:更严谨地匹配到下一个/之前的内容,用[^/]+匹配除了/之外的所有字符,避免后续有空格的情况

代码示例:

-- 方法一:匹配非空白字符
local account_domain = string.match(str, "Account Domain: (%S+)")
-- 方法二:匹配到下一个/之前的内容
local account_domain = string.match(str, "Account Domain: ([^/]+)")

完整示例代码

把两步合在一起,完整的代码是这样的:

local input_str = "[testid-1] is locked out / / Subject: / Account Domain: NM /"

-- 提取方括号内的ID
local test_id = string.match(input_str, "%[(.*)%]")
-- 提取Account Domain的值
local account_domain = string.match(input_str, "Account Domain: (%S+)")

-- 打印结果
print("提取的Test ID:", test_id)       -- 输出:提取的Test ID: testid-1
print("提取的Account Domain:", account_domain) -- 输出:提取的Account Domain: NM

为什么之前的写法失败?

你之前用的[(.*)],在Lua模式里[]会被当作字符集处理,意思是匹配(.*)中的任意一个字符,完全不是你想要的匹配方括号的逻辑。即使你尝试转义,如果用的是\而不是%,Lua也不会识别,反而会把\[当成一个普通的[字符,所以自然匹配不到内容。

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

火山引擎 最新活动