Pattern iterators can extract numeric text before converting it.

Gmatch Numbers

gmatch_numbers.lua
local text = 
local total = 0
local lastNumber = 0

for digits in string.gmatch(text, "%d+") do
  local number = tonumber(digits)
  total = total + number
  lastNumber = number
end

print("text=" .. text)
print("total=" .. total)
print("lastNumber=" .. lastNumber)
local text = 
local total = 0
local lastNumber = 0

for digits in string.gmatch(text, "%d+") do
  local number = tonumber(digits)
  total = total + number
  lastNumber = number
end

print("text=" .. text)
print("total=" .. total)
print("lastNumber=" .. lastNumber)
local text = 
local total = 0
local lastNumber = 0

for digits in string.gmatch(text, "%d+") do
  local number = tonumber(digits)
  total = total + number
  lastNumber = number
end

print("text=" .. text)
print("total=" .. total)
print("lastNumber=" .. lastNumber)
matched text `gmatch` yields strings, so numeric matches should be converted before arithmetic.