【问题标题】:How to print text form a particular part of a string?如何从字符串的特定部分打印文本?
【发布时间】:2021-04-28 21:05:42
【问题描述】:

我想知道如何从句子的特定部分获取文本,这就是我的意思。 Hello (new text).,括号里写着new text,我想找到括号里的文字,只打印括号里的文字。

【问题讨论】:

    标签: lua roblox


    【解决方案1】:

    使用( 和) 包围文本,您可以使用string.match:

    str = "Hello (new text)"
    print(str:match("%((.+)%)"))
    

    %((.+)%)") 是一种捕获( 和) 之间的每个字符的模式。

    资源: Lua 5.3 Reference Manual - 6.4.1 Patterns

    【讨论】:

    • 或分两步使用平衡模式str:match("%b()"):sub(2, -2)
    【解决方案2】:

    最简单的方法就是取消字符串中的 Hello。

    local msg = "Hello (obama)"
    msg = msg:gsub("Hello %(", ""):gsub("%)", "")
    

    如果字符串的第一部分是动态的并且并不总是 hello 你可以试试这个:

    local msg = "Bye (obama)"
    local pattern = "%p.+%p"
    print(({string.match(msg, pattern):gsub("%)", ""):gsub("%(", "")})[1])
    

    这种解决方案可能不是最好和最有效的,但它确实有效。我希望它对你有所帮助。如果您有任何问题,请告诉我。

    【讨论】:

    • 这有点受限且过于复杂(尤其是最后一行)。另请注意,表构造函数周围的括号是多余的。顺便说一句,如果要将多个返回值减少到第一个,只需将函数调用放在括号中即可。 function a() return "a", "b" end print((a())) 打印a,而print(a()) 打印a b 无需将其放入表中并索引第一个元素。
    • 见lua.org/manual/5.4/manual.html#3.4 "任何用括号括起来的表达式总是只产生一个值。因此,(f(x,y,z)) 总是一个值,即使 f 返回几个值。((f(x,y,z))的值是f返回的第一个值,如果f没有返回任何值,则为nil。)"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2014-05-25
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    相关资源
    最近更新 更多