我想通过分隔符拆分字符串,只获取最后一部分。一世 不关心其余的事情。我知道我能做到:
local last
for p in string.gmatch('file_name_test', '_%w+$') do last = p end
哪个有效,但是,恕我直言,丑陋。
有没有更优雅的方式说:
local last = string.gmatch('file_name_test', '_%w+$')[1]
哪个不起作用,因为gmatch
返回迭代器(而不是表)。
答案 0 :(得分:6)
使用不是迭代器的string.match
:
local last = string.match('file_name_test', '_(%w+)$')
print (last) --> test
答案 1 :(得分:4)
模式_%w+$
只返回一个匹配项。那是因为你将它锚定在字符串的末尾,所以它只能匹配或匹配不匹配(如果没有下划线,后面至少有一个%w字符)。
g*
系列模式匹配用于迭代一系列匹配。如果您希望一次性所有匹配(作为多个返回值返回),请使用非g
- 前缀函数。像string.match
:
string.match('file_name_test', '_%w+$')
如果没有匹配,那么您将获得nil
。
答案 2 :(得分:4)
虽然其他答案确实为您的情况提供了正确答案,但我将建议您回答问题。这是从迭代器中获取第一个项目。
答案其实很简单。由于迭代器只是在返回nil之前一直返回的东西,我们只需要调用它!
local first = string.gmatch('file_name_test', '_%w+$')()
然而,我很困惑,因为在你的问题中你还会询问它将返回的 last 事物。 I' M伤心地说你不能没有遍历他们都这样做,是因为一个迭代器不能"跳跃前进"