【发布时间】:2016-03-30 06:25:08
【问题描述】:
我需要在我正在编写的程序中迭代一些字符串对。我没有将字符串对放在一个大表中,而是将它们全部放在一个字符串中,因为我认为最终结果更容易阅读:
function two_column_data(data)
return data:gmatch('%s*([^%s]+)%s+([^%s]+)%s*\n')
end
for a, b in two_column_data [[
Hello world
Olá hugomg
]] do
print( a .. ", " .. b .. "!")
end
输出是你所期望的:
Hello, world!
Olá, hugomg!
但是,顾名思义,two_column_data 函数仅在正好有两列数据时才有效。我怎样才能使它适用于任意数量的列?
for x in any_column_data [[
qwe
asd
]] do
print(x)
end
for x,y,z in any_column_data [[
qwe rty uio
asd dfg hjk
]] do
print(x,y,z)
end
如果有必要,我可以使用 lpeg 来完成这项任务。
【问题讨论】:
-
function k_column_data(k, data) return data:gmatch(('%s*(%S+)'):rep(k)) end -
@Egor 我认为关键是他不知道“k”是什么
-
OP,我认为这应该可行:首先捕获每一整行,然后捕获每个单词,将单词放在一个表格中,然后在返回时解包