Lua中的字符串分割数字
2018-2-24 6:31:22
收藏:0
阅读:121
评论:4
我有一个分割问题:
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);
点赞
用户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
假设您的输入是规则的:
results = {};
for m in str:gmatch("[^%s]+") do
results[#results+1] = m+0;
end
如果输入是不规则的,也就是说您需要验证它不是由空格分隔的随机字符串,您需要使用更复杂的模式,例如。
"[%deE.-]+"
2018-02-24 06:29:10
用户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
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

尝试一下:
s = "-301 1021" x,y = s:match("(%S+)%s+(%S+)") x,y = tonumber(x), tonumber(y)将字符串
s中的两个数字分别赋值给变量x和y。字符串中的数字用空格隔开。match函数用于提取匹配的字符串。%S表示匹配非空字符,+%s+表示匹配一个或多个空格。然后用tonumber函数将提取出的字符串转换成数字类型。