LUA 使用 gsub 删除两个不同的字符

我想用 gsub 删除我的 _string 的开头和结尾两个不同的字符。但我只能删除一个。

    local my_string  = "[祝你生日快乐]"
    local new_string = bouquet:gsub('%]', '')
    print(new_string)

如何创建正确的 gsub 模式?

点赞
用户3832970
用户3832970

你可以使用以下代码:

local new_string = my_string:gsub('^%[(.*)]$', '%1')

参见Lua演示^%[(.*)] $模式匹配:

  • ^ - 字符串的开始
  • %[ - 一个文字 [
  • (.*) - 将零个或多个字符捕获到第1组中(%1表示要从替换模式引用此值)
  • ]-一个]字符
  • $ - 字符串结尾。

或者,您可以使用以下代码:

local new_string = string.gsub(my_string:gsub('^%[', ''), ']$', '')

参见Lua在线演示

^%[ 模式匹配字符串开头的[]$匹配字符串结尾处的字符。

如果不需要检查[]的位置,请使用以下代码:

local new_string = my_string:gsub('[][]', '')

参见Lua演示

[][] 模式匹配[字符。

2020-12-27 22:55:21
用户4984564
用户4984564

你可以这样做:

local new_string = my_string:match("^%[(.*)]$")

解释:匹配以[开头、以]结尾并返回两者之间的内容的字符串。对于任何其他字符串,它将直接返回它们本身。

2020-12-28 07:20:02
用户8294610
用户8294610

由于您了解了 gsub 的基本模式,我建议一个简单的方法来解决您的问题。

local new_string = my_string:gsub('%]',''):gsub('%[','')
2020-12-29 06:28:34
用户11740758
用户11740758

所以...

do
local my_string="[I wish you a happy birthday]"
local new_string=my_string:gsub('[%[%]]','',2)
print(new_string)
end

...会导致期望的输出结果。% 转义了 [],就像其他语言中的 \ 一样。

2020-12-29 12:52:40