我正在尝试使用lua解析文本文件并将结果存储在两个数组中。我认为我的模式是正确的,但这是我第一次做这样的事情。
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
所以我的问题是,我使用哪种模式来选择所有文本到数字?
感谢您的时间。
答案 0 :(得分:2)
%a
匹配字母。它与空格不匹配。
如果您想将所有内容与您想要的一系列数字匹配(.-)(%d+)
。
如果您想匹配前导的非数字序列,那么您需要([^%d]+)(%d+)
。
如果您想要做的就是在数字序列之前插入一个空格,那么您可以使用line:gsub("%d+", " %0", 1)
来执行此操作(仅对第一个匹配执行此操作,将其保留为为线上的每场比赛做到这一点。)
顺便说一句,我不认为io.input(file)
正在做任何对你有用的事情(或者你可能期望的事情)。它正在用文件句柄file
替换默认的标准输入文件句柄。