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 Это не дубликат, поскольку вопрос касается не регулярных выражений, а шаблонов 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