如何将字符串转换为表格?

时间:2018-09-21 15:25:46

标签: string lua lua-table

我有以下字符串文本:

text = "hotkey=F4,value=,autoSend=false, hotkey=Shift+F9,value=,autoSend=false, hotkey=F5,value=,autoSend=false"

,我想将其转换为这样的表:

local table = {
    {hotkey='F4', value=nil, autoSend=false};
    {hotkey='Shift+F9', value=nil, autoSend=false};
    {hotkey='F5', value=nil, autoSend=false}
}

1 个答案:

答案 0 :(得分:1)

此解决方案的范围受到限制,不会涵盖输入字符串中的所有复杂性。一个简单的模式匹配可以生成您要查找的表,但是可以使用此代码为字符串的多样性构建更好/健壮的正则表达式

s = "hotkey=F4,value=,autoSend=false, hotkey=Shift+F9,value=,autoSend=false, hotkey=F5,value=,autoSend=false"
local words = {}
for w in s:gmatch("(hotkey=%g-,value=%g-,autoSend=%w*)") do 
    -- Split string in more managebale parts
    -- i-g w = 'hotkey=F4,value=,autoSend=false, hotkey=Shift+F9'
    -- Extract indivisual k,v pairs and insert into table as desired
    local _hotkey   = string.match(w,"hotkey=(%g-),")
    local _value    = string.match(w,"value=(%g-),")
    local _autoSend = string.match(w,"autoSend=(%w+)")
    table.insert(words,{hotkey=_hotkey, value=_value, autoSend=_autoSend})
end

for _, w in ipairs(words) do
    for k, v in pairs(w) do
        print(k .. ':' .. v)
    end
end

正则表达式说明
():捕获字符串
%g:可打印字符(空格除外)
%w:字母数字字符
*:0次或多次重复
-:0个或多个懒惰重复