Lua模式匹配问题
我正在尝试使用lua解析一个文本文件,并将结果存储在两个数组中。我认为我的模式是正确的,但这是我第一次做这种事情 fileio.lua:Lua模式匹配问题,lua,pattern-matching,Lua,Pattern Matching,我正在尝试使用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[li
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的一个小片段:
如果死者能说话16
被遗忘的灵魂16
牙刷
装备精良的野蛮人9
下面是results.txt的匹配片段:
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)
talk 16
灵魂16
策略9
萨维奇9
我在results.txt中想要的是:
如果死者能说话16
被遗忘的灵魂16
牙齿咬伤法
全副武装的野蛮人9
所以我的问题是,我用哪种模式来选择一个数字以内的所有文本
谢谢您的时间。
%a
匹配字母。它与空格不匹配
如果要将所有内容匹配到所需的数字序列(.-)(%d+)
如果要匹配非数字的前导序列,则需要([^%d]+)(%d+
也就是说,如果您只想在一系列数字前插入一个空格,那么您可以使用行:gsub(“%d+”,“%0”,1)
来执行此操作(仅对第一个匹配执行此操作的一个,对行上的每个匹配都禁用此操作)
顺便说一句,我认为,
io.input(file)
并没有为您做任何有用的事情(或者您可能期望的事情)。它正在将默认的标准输入文件句柄替换为文件句柄file
谢谢,([^%d]+)(%d+)
是我想要的。哦,我明白了,这是我第一次正确地使用lua,教程也提到了这一点。我把它拿出来。什么教程?它说了什么?你可能是指(.-)(%d+)
,而不是(.*)(%d+)
@lhf。谢谢