将字符串拆分为Lua中的数字

时间:2018-02-23 22:46:58

标签: lua

我分裂这个问题:

x = "-301 1021"

到这个

x = -301
y = 1021

在C ++中,这更容易,但我真的不知道如何在Lua中做到这一点。我尝试过这样做

string1 .. string[i] 

@Edit    我已经这样做了,但现在它没有获得负面的值

 for coordinate in ActualCoords:gmatch("%w+") do 
     table.insert(coordinates, coordinate)
 end
        x = coordinates[1];
        x = tonumber(x);
        z = coordinates[2];
        z = tonumber(z);

4 个答案:

答案 0 :(得分:0)

试试这个:

s = "-301 1021"
x,y = s:match("(%S+)%s+(%S+)")
x,y = tonumber(x), tonumber(y)

答案 1 :(得分:0)

您可以使用LPEG进行此类解析任务。

local lpeg = assert(require"lpeg")
local R, S = lpeg.R, lpeg.S

local integer = (S'+-'^-1 * R("09")^1) / tonumber
local space = S(" \t")^0

local x, y = lpeg.match((integer * space)^1, "-301 1021")
print(x,y)

答案 2 :(得分:0)

假设您的输入是常规的:

restults = {};
for m in str:gmatch("[^%s]+") do
    results[#results+1] = m+0;
end

如果输入是不规则的,意味着你需要验证它不是由空格分隔的随机事物,你需要制作一个更复杂的模式,例如。

"[%deE.-]+"

答案 3 :(得分:0)

或试试这个

local s  = "-301 1021 -300 1022 -20 -1000"
local coord = {}
for x,y in s:gmatch("(-?%d+).-(-?%d+)") do
 coord[#coord+1] = { x=tonumber(x), y=tonumber(y) }
end

print( coord[1].x, coord[1].y)
print( coord[2].x, coord[2].y)
print( coord[3].x, coord[3].y)