3

我有一个逗号分隔的输入字符串,需要支持空条目。所以一个类似的字符串a,b,c,,d应该产生一个有 5 个条目的表,其中第 4 个是一个空值。

一个简化的例子

str="a,b,c,,d"
count=0

for v in string.gmatch(str, '([^,]*)') do
    count = count + 1
end

print(count)

此代码输出

9

在 Lua 5.1 中,虽然只有 5 个条目。

我可以将*正则表达式中的 更改为+- 然后它报告 4 个条目a,b,c,d,但不是空的。似乎这种行为已在 Lua 5.2 中修复,因为上面的代码在 lua 5.2 中运行良好,但我不得不为 lua 5.1 找到解决方案

我目前的实现

function getValues(inputString)
  local result = {}

  for v in string.gmatch(inputString, '([^,]*)') do
    table.insert(result, v)
  end

  return result
end

有关如何修复的任何建议?

4

2 回答 2

3

您可以在文本中附加逗号并使用([^,]*),模式获取所有值:

function getValues(inputString)
  local result = {}

  for v in string.gmatch(inputString..",", '([^,]*),') do
    table.insert(result, v)
  end

  return result
end

输出:

a
b
c

d
于 2020-04-06T09:50:31.340 回答
0
local str="a,b,c,,d"
local count=1
for value in string.gmatch(str, ',') do
    count = count + 1
end
print(count)

如果你想获得价值,你可以做类似的事情


local function values(str, previous)
    previous = previous or 1
    if previous <= #str then
        local comma = str:find(",", previous) or #str+1
        return str:sub(previous, comma-1), values(str, comma+1)
    end
end
于 2020-04-06T07:52:47.620 回答