我的string.find出现问题,下面的代码可以正常工作:
local value = "268 956 30"
if value ~= nil then
local _, _, a, b, c = string.find(value, '([%d%.]+) ([%d%.]+) ([%d%.]+)')
print(a)
print(b)
print(c)
end
返回: 268 956 30
当变量包含减号(-)时,它将返回nil:
local value = "-268 -956 30"
if value ~= nil then
local _, _, a, b, c = string.find(value, '([%d%.]+) ([%d%.]+) ([%d%.]+)')
print(a)
print(b)
print(c)
end
返回: 零 零 零
有人可以帮我吗?
答案 0 :(得分:3)
您需要调整模式以适应-
使用此值-268 956 30
查看当前代码的结果
输出:
268
956
30
结果与第一个字符上没有-
的结果相同,这是因为-
被忽略了,因为不需要模式来匹配第一个字符。
您也可以通过调整模式来在样式中加入-
(%-?[%d%.]+) (%-?[%d%.]+) (%-?[%d%.]+)
在这里,我们使用-
来对%
进行转义,然后使用?
后缀(匹配0或1个出现次数)来定义要允许的数量。这将使匹配项适用于有效的数字,例如30
或-30
,但不能匹配--30
,但是由于模式仍未锚定在字符串的开头,因此仍然可以匹配{{ 1}}作为第一个值,但仅返回--30
。如果不希望这样,我们可以将-30
添加到模式的第一个字符。
示例:
^
输出:
-268
-956
30
Lua模式资源:FHUG: Understanding Lua Patterns