Lua模式匹配问题

我正在尝试使用 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]〜= nilthen
    file:write(questNames [i])
    file:write(“”)
    file:write(questLevels [i])
    file:write(“ \ n”)
  end
end

io.close(file)

这是 questlist.txt 的一个小片段:

如果死人能谈16 被遗忘的灵魂16 The Toothmaul Ploy9 Well-Armed Savages9

这是 results.txt 的一个匹配片段:

talk 16 soul 16 Ploy 9 Savages 9

我在 results.txt 中寻求的是:

如果死人能够谈论16 被遗忘的灵魂16 The Toothmaul Ploy 9 武装部落9

因此,我的问题是,我使用哪个模式才能选择所有文本直到数字?

感谢您的时间。

点赞
用户258523
用户258523

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

如果要匹配到一串数字前的所有内容,可以使用(.-)(%d+)

如果要匹配前导的一串非数字内容,那么可以使用([^%d]+)(%d+)

话虽这么说,如果你只是想在一串数字前插入一个空格,那么可以使用line:gsub("%d+", " %0", 1)(其中的1表示只对第一个匹配进行操作。如果不需要的话可以不加这个参数)。

另外,我认为io.input(file)对你来说并没有什么用(或者说不是你想要的效果)。它是用文件句柄file替换了默认的标准输入文件句柄。

2016-01-13 13:30:31