我的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
当变量包含减号(-)时,它返回一个零:
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返回:零零
有人能帮帮我吗?
发布于 2019-10-21 16:45:20
您需要调整您的模式以允许-
使用此值-268 956 30查看当前代码的结果
输出:
268 956 30
结果与第一个字符上没有-的结果相同,这是因为-被忽略,因为匹配第一个字符不需要模式。
您也可以通过调整模式将-包括在您的模式中。
(%-?[%d%.]+) (%-?[%d%.]+) (%-?[%d%.]+)
在这里,我们使用-使用%来转义,然后通过使用?后置词(匹配0或1次出现)来定义我们想要允许的数量。这将允许匹配对于一个有效的数字,如30或-30,而不是--30,但是由于模式仍然没有锚定在字符串的前面,所以对于第一个值仍然可以与--30匹配,但只能返回-30。如果这是不需要的,我们可以将^添加到模式的第一个字符中。
示例:
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
Lua模式资源:FHUG:理解Lua模式
https://stackoverflow.com/questions/58490517
复制相似问题