Lua: заменить символы в строке - PullRequest
0 голосов
/ 03 октября 2018

У меня есть строки типа

abcdef
abcd|(
abcde|(foo 
abcd|)
abcde|)foo

, которые должны быть изменены на

abcdef
abcd
abcde \foo 
abcd
abcde \foo 
  • , если нет |, тогда ничего не делать
  • , еслиничто не следует за |( или |), затем удалите эти два символа
  • , если что-то следует, замените |( или |) на <space>\

Меня интересуеткороткие выражения шаблона, если это возможно.Я могу сделать это несколькими string.find и string.sub, но тогда у меня есть лот if операторов.

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете использовать

function repl(v)
    res, _ = string.gsub(v:gsub('|[()]$', ''), '|[()]', ' \\')
    return res
end

См. Демоверсия Lua онлайн

Подробности

  • '|[()]$'соответствует |, а затем либо ( или ) в конце строки, а string.gsub заменяет эти вхождения пустой строкой
  • |[()], затем соответствует | и затем либо ( или ) в любом месте в строке, и string.gsub заменяет эти вхождения пробелом и \.
...