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);
点赞
用户107090
用户107090

尝试一下:

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

将字符串 s 中的两个数字分别赋值给变量 xy。字符串中的数字用空格隔开。match 函数用于提取匹配的字符串。%S 表示匹配非空字符,+%s+ 表示匹配一个或多个空格。然后用 tonumber 函数将提取出的字符串转换成数字类型。

2018-02-24 02:17:46
用户1944004
用户1944004

你可以使用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)
2018-02-24 02:27:35
用户1244588
用户1244588

假设您的输入是规则的:

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

如果输入是不规则的,也就是说您需要验证它不是由空格分隔的随机字符串,您需要使用更复杂的模式,例如。

"[%deE.-]+"
2018-02-24 06:29:10
用户7504558
用户7504558
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)
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)

将字符串 s 中的数字分离,分别存储在形如 {x=1, y=2} 的数据结构中,并打印出前三组的结果。结果如下:

-301    1021
-300    1022
-20     -1000
2018-02-24 06:41:40