Как преобразовать строку в таблицу? - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть текст строки:

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 голосов
/ 22 сентября 2018

Это решение ограничено по объему и не охватывает все сложности входной строки.Простое сопоставление с образцом может генерировать таблицы, которые вы ищете, но используйте этот код для создания лучшего / надежного регулярного выражения для разнообразия ваших строк

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 или более ленивых повторений

...