如何从Lua字符串中提取出一个单词

我知道如何将整个字符串拆分并放入表格中,但是我需要只提取第一个词,然后其余部分的字符串需要保持不变。

我尝试对此做了一些尝试,但我不知道该怎么做:

words = {}
for word in s:gmatch("%w+") do table.insert(words,word) end
点赞
用户1009479
用户1009479

为了匹配一个单词,你应该使用 string.match 而不是 string.gmatch:

local words = {}
words[1], words[2] = s:match("(%w+)(.+)")

words[1] 包含第一个单词,而 words[2] 则包含其余的内容。

2014-07-07 05:41:48
用户1673550
用户1673550

Yu Hao 的解决方案存在一个问题,即如果s本身只是单词,它将返回这个单词而不是最后一个字符给words [1],并将最后一个字符返回给words [2]

这里是我制定的解决方案,可以正确地解决这个问题:

local words = {}
words [1],words [2] = s:match(“(%w +)(%W +)”)
如果words [1] == nil then words [1] = s end

+.+更改为 \ W +(因此只有非单词字符可以在单词之间出现)。这可能导致根本没有匹配(如果字符串为空或只有一个单词),因此我检查并修复该情况。

可能有更好的方法将其全部包含在单个匹配模式中,但我只是想提供一个解决方案,以防万一有人遇到这种情况。

2021-03-28 16:27:47
用户20949371
用户20949371

Ollie 的解决方案似乎有些过度了。

如果您想处理字符串可能包含一个或多个单词的情况,那么您只需要将第二个捕获从 ".+" 更改为 ".*"。

s:match("(%w+)(.*)")
2023-01-15 20:49:16