字符串是否有一个简单的方法来拆这样的字符串:Lua的分裂没有分隔
M34a79 or M2ab943 or M4c4
到
M,34,a,79 or M,2,ab,943 or M,4,c,4
没有任何分隔符?
字符串是否有一个简单的方法来拆这样的字符串:Lua的分裂没有分隔
M34a79 or M2ab943 or M4c4
到
M,34,a,79 or M,2,ab,943 or M,4,c,4
没有任何分隔符?
可以用一对GSUB的做它调用:
x = "M34a79 or M2ab943 or M4c4"
x, _ = x:gsub("(%d)(%a)", "%1,%2")
x, _ = x:gsub("(%a)(%d)", "%1,%2")
print(x)
男,34,,79或M,2,AB,943或M,4,C,4
可能不适用于所有情况,但对您的示例起作用。
如果你不介意使用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 },
解决方案:
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的5
按照最初提出的问题留下问题并添加解决方案作为答案。 – lhf