我有一个字符串,从一个数字开始,然后是一个空格,然后是一个未知数量的字母,再一个空格,然后有时另一个文本(可能或可能)不包含多个单词)。
编辑:最后一段文字有时被遗漏(参见示例#2) 使用注释中提到的方法,#2上的str:find(...)将返回nil。
示例:
"(number) (text) [more text]"
1: "10 HELLO This is a string"
2: "88 BYE"
我想要的是将这些字符串拆分成一个表,在包含更多这些拆分字符串的表中,如下所示:
{
[(number)] = { [1] = (text), [2] = (more text) }
[10] = { [1] = "HELLO", [2] = "This is a string" }
}
我尝试了几种方法,但没有一种能给我想要的结果。 例如,我尝试过的方法之一是在空格上拆分字符串。但结果是:
{
[10] = { [1] = "HELLO", [2] = "This", ... [4] = "string" }
}
提前致谢。
答案 0 :(得分:2)
使用各种Lua string patterns,实现理想的结果非常容易。
例如。
function CustomMatching( sVar )
local tReturn = {}
local _, _, iNumber, sWord, sRemain = sVar:find( "^(%d+)%s(%a+)%s(.+)" )
tReturn[tonumber(iNumber)] = { sWord, sRemain }
return tReturn
end
并称之为:
local sVar = "10 HELLO This is a string"
local tMyTable = CustomMatching( sVar )
在find()
方法中,模式"^(%d+)%s(%a+)%s(.+)"
表示:
%d
),直至遇到空格。%a
),直至遇到空格。根据comments中的讨论,将tReturn[iNumber]
更改为tReturn[tonumber(iNumber)]
。
答案 1 :(得分:0)
您可以将string.match
方法与适当的pattern:
local n, w, str = ('10 HELLO This is a string'):match'^(%d+)%s+(%S+)%s+(.*)$'
your_table[tonumber(n)] = {w, str}