我想为一个字符串和几个数字匹配几行.线条看起来像
" Code : 75.570 "
Run Code Online (Sandbox Code Playgroud)
要么
" ..dll : 13.559 1"
Run Code Online (Sandbox Code Playgroud)
要么
" ..node : 4.435 1.833 5461"
Run Code Online (Sandbox Code Playgroud)
要么
" ..NavRegions : 0.000 "
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西
local name, numberLeft, numberCenter, numberRight = line:match("regex");
Run Code Online (Sandbox Code Playgroud)
但我对字符串匹配很新.
这种模式适用于所有情况:
%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
Run Code Online (Sandbox Code Playgroud)