Lua分割没有分隔符的字符串
2014-9-1 20:5:3
收藏:0
阅读:80
评论:3
有没有一种简单的方法将像这样的字符串分割:
M34a79 or M2ab943 or M4c4
分割成
M,34,a,79 or M,2,ab,943 or M,4,c,4
不需要任何分隔符?
点赞
用户441830
如果您不介意使用 LPEG 库:
local lpeg = require "lpeg"
local C, Ct, P, R = lpeg.C, lpeg.Ct, lpeg.P, lpeg.R
local lpegmatch = lpeg.match
local extract
do
local digit = R"09"
local lower = R"az"
local comma = P","
local space = P" "
local schema = Ct( C(P"M")
* (digit^1 / tonumber)
* C(lower^1)
* (digit^1 / tonumber))
local extractor = Ct((schema + 1)^0)
extract = function (str)
return lpegmatch (extractor, str)
end
end
这将匹配所有输入字符序列,这些序列按顺序由以下组成:
- 字母
M, - 一个或多个十进制数字组成的序列,
- 一个或多个小写字母组成的序列,
- 另一个由一个或多个十进制数字组成的序列。
在处理输入时,每个匹配都将放在一个子表中,并且数字将即时转换为 Lua 数字。由于问题请求,首字母M包括在条目中。
用法示例:
local data = extract [[M34a79 or M2ab943 or M4c4]]
for i = 1, #data do
local elm = data[i]
print (string.format ("[%d] = { [1] = %q, [2] = %d, [3] = %q, [4] = %d },",
i, table.unpack (elm)))
end
输出结果:
[1] = { [1] = "M", [2] = 34, [3] = "a", [4] = 79 },
[2] = { [1] = "M", [2] = 2, [3] = "ab", [4] = 943 },
[3] = { [1] = "M", [2] = 4, [3] = "c", [4] = 4 },
2013-10-25 15:45:48
用户2616116
解决方案:
http://www.coronalabs.com/blog/2013/04/16/lua-string-magic/
function string:split( inSplitPattern, outResults )
...
end
function val(x)
x = x:gsub( "(%d)(%a)", "%1,%2" )
x = x:gsub( "(%a)(%d)", "%1,%2" )
Table = string.split(x,",")
for i = 1, #Table do
print( Table[i] )
end
end
val("M3a5")
返回 M 3 a 5
2013-10-25 16:34:05
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你可以使用一对 gsub 调用来实现:
x = "M34a79 or M2ab943 or M4c4" x, _ = x:gsub( "(%d)(%a)", "%1,%2" ) x, _ = x:gsub( "(%a)(%d)", "%1,%2" ) print( x )可能不适用于所有情况,但可以使用在你的这个示例中。