Lua: 我该如何将一个变长字符串拆分成多个部分?

我有一个以数字开头的字符串,然后是一个空格,然后是一个未知数量字母的单词,再是一个空格,有时还有另一个可能包含一个以上单词的文本片段(也可能没有)。

编辑:最后一个文本片段有时会省略(请参见示例#2) 使用评论中提到的方法,#2上的str:find(...)会返回nil。

示例:

“(数字)(文本)[更多文本]”
1:“10 HELLO This is a string2:“88 BYE”

我想把这些字符串拆分成一个表中,其中包含更多这些拆分出来的字符串,就像这样:

{
    [(数字)] = {[1] =(文本),[2] =(更多文本)}
   [10] = {[1] =“HELLO”,[2] =“This is a string”}
}

我尝试了几种方法,但没有一个能给我想要的结果。 例如,我尝试的一个方法是在空格上拆分字符串。但这导致了:

{
  [10] = { [1] = "HELLO", [2] = "This", ... [4] = "string" }
}

提前致谢。

点赞
用户1847592
用户1847592

你可以通过使用适当的 模式来使用 string.match 方法:

local n, w, str = ('10 HELLO This is a string'):match'^(%d+)%s+(%S+)%s+(.*)$'
your_table[tonumber(n)] = {w, str}
2013-03-19 19:31:01
用户1190388
用户1190388

使用各种 Lua 字符串模式,实现所需结果十分容易。

例如:

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)。
  • 查找并保存直到字符串结尾的所有字符。

编辑

根据评论讨论,将tReturn[iNumber]更改为tReturn[tonumber(iNumber)]

2013-03-19 21:06:41