Lua中多行文本的分析和字数计算

Lua中多行文本的分析和字数计算,lua,Lua,假设我有多行文字: str = [[ The lazy dog sleeping on the yard. While a lazy old man smoking. The yard never green again. ]] 我可以使用以下方法拆分每个单词: for w in str:gmatch("%S+") do print(w) end 但我如何获得结果作为一个例子: The = 3 words, line 1,3 Lazy = 2 words, line 1

假设我有多行文字:

  str = [[
  The lazy dog sleeping on the yard.
  While a lazy old man smoking.
  The yard never green again.
  ]]
我可以使用以下方法拆分每个单词:

 for w in str:gmatch("%S+") do print(w) end
但我如何获得结果作为一个例子:

The = 3 words, line 1,3
Lazy = 2 words, line 1,2
Dog = 1 word, line 1
..and so on?

谢谢

您可以使用
gmatch
检测
\n
,就像您已经在数词一样

模式类似于
“[^\n]+”
,代码类似于:

local str = [[
The lazy dog sleeping on the yard.
While a lazy old man smoking.
The yard never green again.
]]
local words = {}
local lines = {}
local line_count = 0

for l in str:gmatch("[^\n]+") do
  line_count = line_count + 1
  for w in l:gmatch("[^%s%p]+") do 
    w = w:lower()
    words[w] = words[w] and words[w] + 1 or 1
    lines[w] = lines[w] or {}
    if lines[w][#lines[w]] ~= line_count then
      lines[w][#lines[w] + 1] = line_count
    end
  end
end


for w, count in pairs(words) do
  local the_lines = ""
  for _,line in ipairs(lines[w]) do
    the_lines = the_lines .. line .. ','
  end
  --The = 3 words, line 1,3 
  print(w .." = " .. count .. " words , lines " .. the_lines)
end
完整输出,请注意,我还将用于捕获单词的模式更改为
“[^%s%p]+”
我这样做是为了删除与吸烟相关的

smoking = 1 words , lines 2,
while = 1 words , lines 2,
green = 1 words , lines 3,
never = 1 words , lines 3,
on = 1 words , lines 1,
lazy = 2 words , lines 1,2,
the = 3 words , lines 1,3,
again = 1 words , lines 3,
man = 1 words , lines 2,
yard = 2 words , lines 1,3,
dog = 1 words , lines 1,
old = 1 words , lines 2,
a = 1 words , lines 2,
sleeping = 1 words , lines 1,

非常感谢你,@Nifim,这些都是我需要的。你给出的解决方案也解释得很清楚。现在,我的作业完成了。好极了!一种较短的方法:
words[w]=words[w]和words[w]+1或1
是:
words[w]=(words[w]或0)+1