Как я могу заменить часть строки в Lua? - PullRequest
1 голос
/ 28 сентября 2019

У меня есть эта строка в Lua:

"The |cffffffffcar|r is here."

Как я могу использовать string.gsub(), чтобы заменить все, что находится между |cffffffff и |r, на другое слово?Обратите внимание, что это не обязательно будет car, это может быть любое слово, которое мне нужно заменить, но оно всегда будет между |cffffffff и |r.

Я не знаю, сколько словбудет до или после слова, чтобы заменить, поэтому я не могу сделать простой подсчет слов или символов.GSUB должен заменить все, что находится между |cffffffff и |r независимо от того, где они находятся в строке.Это ключ к решению.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Егор Скриптунов опубликовал правильный ответ, но я не могу пометить его, как это было в ветке комментариев.Если Егор переместит его в ответ, я поменяю оценку.

Но это то, что предложил Егор, и это сработало отлично, он сделал все, что хотел, поэтому Егор был невероятно полезен.Спасибо, Егор.

input:gsub("(|cffffffff)[^|]*(|r)", "%1another-car%2") 

Удалите% 1 и% 2, чтобы удалить цветные теги

Вот как я использую решение Егора в своем коде:

local myvar = "|cffffffff" .. "red car" .. "|r"
local newvar = "blue car"

myvar = gsub(myvar, "(|cffffffff)[^|]*(|r)",  "%1" .. newvar .. "%2")
print(myvar)
0 голосов
/ 28 сентября 2019

Вот один подход, использующий gsub:

input = "The |cffffffffcar|r is here."
s = string.sub(input, "^(.*)[|].*[|](.*)$", "%1|BLAH|%2")
print(s)

Это печатает:

The |BLAH|r is here.

Логика здесь заключается в том, что мы собираем, в двух отдельных группах захвата, текст напо обе стороны от двух труб |.Затем мы соединяем желаемый результат, используя две группы захвата с новой строкой, расположенной между трубами.

...