【发布时间】:2014-08-27 12:33:44
【问题描述】:
我知道如何拆分整个字符串并将其放入表格中,但我只需要取出第一个单词然后字符串的其余部分需要保持不变。
我试图对此做点什么,但我不知道:
words = {}
for word in s:gmatch("%w+") do table.insert(words,word) end
【问题讨论】:
标签: string lua split lua-patterns
我知道如何拆分整个字符串并将其放入表格中,但我只需要取出第一个单词然后字符串的其余部分需要保持不变。
我试图对此做点什么,但我不知道:
words = {}
for word in s:gmatch("%w+") do table.insert(words,word) end
【问题讨论】:
标签: string lua split lua-patterns
要匹配一个单词,你应该使用string.match而不是string.gmatch:
local words = {}
words[1], words[2] = s:match("(%w+)(.+)")
words[1] 包含第一个单词,words[2] 包含其余单词。
【讨论】:
words 在您的程序中应该是全局的。我习惯改成local。
Yu Hao 的解决方案有一个突破的边缘情况:如果 's' 本身只是一个单词,它将返回那个单词,不包含最后一个字符到 words[1] 和最后一个字符到 words[2]。
这是我提出的一种解决方法,可以正确捕获这种边缘情况:
local words = {}
words[1], words[2] = s:match("(%w+)(%W+)")
if words[1] == nil then words[1] = s end
将.+ 更改为\W+(因此单词之间只能出现非单词字符)。这可能会导致根本不匹配(如果字符串为空或只有一个单词),所以我检查并修复了这种情况。
可能有更好的方法可以在单个匹配模式中获取所有内容,但我只是想提供一个解决方法,如果有人遇到这种边缘情况。
【讨论】: