2016-01-13 6 views
2

Я пытаюсь разобрать текстовый файл с помощью lua и сохранить результаты в двух массивах. Я думал, что мой образец будет правильным, но это первый раз, когда я сделал что-то подобное.Lua Pattern Matching issue

fileio.lua:

questNames = {} 
questLevels = {} 
lineNumber = 1 

file = io.open("results.txt", "w") 
io.input(file) 

for line in io.lines("questlist.txt") do 
    questNames[lineNumber], questLevels[lineNumber]= string.match(line, "(%a+)(%d+)") 
    lineNumber = lineNumber + 1 
end 

for i=1,lineNumber do 
    if (questNames[i] ~= nil and questLevels[i] ~= nil) then 
    file:write(questNames[i]) 
    file:write(" ") 
    file:write(questLevels[i]) 
    file:write("\n") 
    end 
end 

io.close(file) 

Вот небольшой фрагмент questlist.txt:

If the dead could talk16 Forgotten soul16 The Toothmaul Ploy9 Well-Armed Savages9

А вот соответствующий фрагмент results.txt:

talk 16 soul 16 Ploy 9 Savages 9

То, что я после того, как в results.txt является:

If the dead could talk 16 Forgotten soul 16 The Toothmaul Ploy 9 Well-Armed Savages 9

Так что мой вопрос, какой шаблон я использую для того, чтобы выбрать весь текст до номера?

Спасибо за ваше время.

ответ

2

%a соответствует буквам. Он не соответствует пробелам.

Если вы хотите найти все до нужной вам цифры (.-)(%d+).

Если вы хотите совместить ведущую последовательность без цифр, то вы хотите ([^%d]+)(%d+).

Это означает, что если все, что вы хотите сделать, это вставить пробел перед последовательностью цифр, тогда вы можете просто использовать line:gsub("%d+", " %0", 1), чтобы сделать это (один, чтобы сделать это только для первого матча, оставьте это, чтобы сделать это для каждое совпадение на линии).

Как ни в стороне, я не думаю, что io.input(file) делает что-нибудь полезное для вас (или то, что вы можете ожидать). Он заменяет дескриптор стандартного входного файла по умолчанию дескриптором файла file.

+0

Спасибо, '([^% d] +) (% d +)' это то, что мне нужно. О, я вижу, это мой первый раз, используя lua правильно, и в учебнике упоминалось об этом. Я возьму его. –

+0

Какой учебник? Что он сказал об этом? –

+1

Вы, вероятно, имеете в виду '(.-) (% d +)' вместо '(. *) (% D +)'. – lhf