将lua字符串拆分成变量

我是新手,希望你能帮助我。

我正在编程灯光,我想做的是从我的灯光控制台(一个名为"4 Mythos Stage"的文本字符串)中获取一个变量并将其拆分成不同的变量。

为了从控制台获取变量,我使用:

return function ()
local Layer1 = gma.user.getvar("Layer1") -- 我将"4 Mythos Stage"变量放在Layer1中
gma.feedback(Layer1) -- 反馈4 Mythos Stage
end

现在,我想将字符串拆分成3个新的本地变量,分别命名为:

local number -- 应生成4
local fixturetype -- 应生成Mythos
local location -- 应生成Stage

我尝试了以下代码:

local number = string.match('Layer1', '%d+')
local fixturetype = string.match('Layer1', '%a+')
local location = string.match('Layer1', '%a+')

但是这不起作用,所以有人能请指导一下我吗,我会非常感激。

顺祝商祺,

Martijn

点赞
用户9383219
用户9383219

由于 Lua 具有多重返回和多重赋值,因此您可以同时分配所有三个变量。在每个模式周围括号中放置,以便将它们作为捕获返回,并将它们与空格组合成单个模式:

local number, fixturetype, location = string.match(Layer1, '(%d+) (%a+) (%a+)')

如果您将在项目之间使用多个空格或制表符,则此模式将更好:

local number, fixturetype, location = string.match(Layer1, '(%d+)[ \t]+(%a+)[ \t]+(%a+)')

您尝试失败的原因是 string.match('Layer1','%d+')正在搜索 'Layer1'(字符串)而不是 Layer1(变量)。

但即使您更正了这一点,每次调用 string.match(Layer1, '%a+')(其中 Layer1 == '4 Mythos Stage')时,您仍将获得 'Mythos'string.match始终从字符串开头开始,除非您在第三个参数中提供索引: string.match(Layer1, '%a+', 9) - > 'Stage'

2018-04-04 22:11:48
用户107090
用户107090

一个强大的解决方案是将字符串分成三个“单词”,其中一个单词是一系列非空格字符的序列:

local number, fixturetype, location = string.match(Layer1, '(%S+)%s+(%S+)%s+(%S+)')
2018-04-05 00:49:23