Этот шаблон будет работать для каждого случая:
%s*([%w%.]+)%s*:%s*([%d%.]+)%s*([%d%.]*)%s*([%d%.]*)
Краткое объяснение: []
создает набор символов (например, десятичные дроби). Последние числа используют [set]*
, поэтому допустимо и пустое совпадение. Таким образом, номер, который не был найден, будет эффективно назначен nil
.
Обратите внимание на разницу между использованием +
-
*
в шаблонах. Подробнее о шаблонах в справочнике Lua .
Это будет соответствовать любой комбинации точек и десятичных знаков, поэтому может быть полезно попытаться преобразовать ее в число с tonumber()
впоследствии.
Некоторые тестовые коды:
s={
" Code : 75.570 ",
" ..dll : 13.559 1",
" ..node : 4.435 1.833 5461",
" ..NavRegions : 0.000 "
}
for k,v in pairs(s) do
print(v:match('%s*([%w%.]+)%s*:%s*([%d%.]+)%s*([%d%.]*)%s*([%d%.]*)'))
end