LUA изтрива 2 различни знака с gsub

Искам да изтрия два различни знака в началото и края на my_string с gsub.. Но успях да изтрия само един..

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

Как мога да създам правилния модел gsub?


person SweetNGX    schedule 27.12.2020    source източник
comment
Ако знаците присъстват, опитайте my_string:sub(2,-2).   -  person lhf    schedule 28.12.2020


Отговори (4)


можете да направите нещо подобно:

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

обяснение: Съвпадение низ, който започва с [ и завършва с ] и връща само това, което е между двете. За всички други низове той просто ще ги върне такива, каквито са.

person DarkWiiPlayer    schedule 28.12.2020

Можеш да използваш

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.

Шаблонът [][] съвпада или с ] символ, или с [ символ.

person Wiktor Stribiżew    schedule 27.12.2020
comment
Много благодаря... - person SweetNGX; 28.12.2020
comment
@bobblebubble Това не е дубликат, тъй като въпросът не е за regex, а за Lua модели. Замених грешния етикет. - person Wiktor Stribiżew; 28.12.2020
comment
Регулярният израз [][] съвпада — това е модел, а не регулярен израз;) - person DarkWiiPlayer; 28.12.2020

Тъй като знаете основния модел за gsub, предлагам лесен начин за решаване на проблема ви.

local new_string = my_string:gsub('%]',''):gsub('%[','')
person Renshaw    schedule 29.12.2020

So...

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

...води до желания резултат. % избягва [ и ] - Както в други езици, \ прави.

person koyaanisqatsi    schedule 29.12.2020