Lua模式匹配问题

时间:2016-01-13 13:08:28

标签: 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[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

所以我的问题是,我使用哪种模式来选择所有文本到数字?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

%a匹配字母。它与空格不匹配。

如果您想将所有内容与您想要的一系列数字匹配(.-)(%d+)

如果您想匹配前导的非数字序列,那么您需要([^%d]+)(%d+)

如果您想要做的就是在数字序列之前插入一个空格,那么您可以使用line:gsub("%d+", " %0", 1)来执行此操作(仅对第一个匹配执行此操作,将其保留为为线上的每场比赛做到这一点。)

顺便说一句,我不认为io.input(file)正在做任何对你有用的事情(或者你可能期望的事情)。它正在用文件句柄file替换默认的标准输入文件句柄。