Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua模式匹配问题_Lua_Pattern Matching - Fatal编程技术网

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

我正在尝试使用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的一个小片段:

如果死者能说话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。谢谢