Кажется, Lua обнаруживает пустую строку между двумя токенами как отдельный токен по любой причине. Это не интуитивно понятно, но не совсем неверно, поскольку [%w]*
соответствует пустой строке. Вы можете обойти эту проблему, используя string.find
и увеличивая позицию на два вместо одного после каждого совпадения:
local index = 0
local str = "$HEHDT,99.00,,T*2F"
local a, b = 0, 1
while true do
a, b = str:find("[%w.]*", b+2)
if not a then break end
print(string.format("%d: [%i,%i] %s", index, a, b, str:sub(a, b)))
index = index + 1
end
Этот код, вероятно, может быть переписан, чтобы быть немного красивее, но я оставлю что тебе: D