我有一个像first part;second part
这样的字符串。我想将它拆分为;
并返回第二部分。一切正常:
start = mystring:find(';')
result = mystring:sub(start)
但我希望能在一条线上做到这一点:
result = mystring:sub(mystring:find(';'))
它不会引发错误,但它不会返回预期的结果。这不是一个大问题,因为它在两行代码上运行良好,但理解为什么它不在oneliner上工作将帮助我更好地理解lua如何工作。
答案 0 :(得分:3)
find
实际上返回两个值,即您查找的字符串所在的开始和结束索引。在这种情况下,两个指数都是11.
然后,当您将这两个索引传递给sub
时,您将获得一个开始和结束于11的子字符串,因此您只能得到';'。
答案 1 :(得分:3)
试试这个:
s="first part;second part"
print(s:match(";(.-)$"))
或者这个:
print(s:sub(s:find(";")+1,-1))
答案 2 :(得分:1)
这也有效:
result = mystring:sub((mystring:find(';')))
额外的括号确保仅使用一个参数调用sub
,因此它将使用默认值(mystring
的结尾)作为第二个参数。