如何在Lua中替换字符串的一部分?

我在Lua中有这个字符串:

"The |cffffffffcar|r is here."

我怎样才能使用 string.gsub() 来将位于 |cffffffff|r 之间的任何内容替换为其他单词?请注意,它不一定是 car,它可以是任何我需要替换的单词,但它总会在 |cffffffff|r 之间。

我不知道在替换单词之前或之后有多少个单词,因此无法进行简单的字数或字符数计数。 GSUB 必须替换位于字符串中的 |cffffffff|r 之间的任何内容。这是解决方案的关键。

谢谢。

点赞
用户1863229
用户1863229

以下是使用 gsub 的其中一种方法:

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

这将输出:

The |BLAH|r is here.

这里的逻辑是我们在两个分组中分别对两个管道 | 两侧的文本进行捕获。然后,我们使用这两个捕获组,夹杂着新字符串的管道,将要输出的字符串拼接在一起。

2019-09-28 15:44:39
用户10968197
用户10968197

Egor Skriptunoff已发布了正确的答案,但由于该答案在评论线程中,我无法标记它。如果Egor将其移动到答案中,我将更改我的标记。

但这就是Egor建议的,它完美地完成了我想要的一切,所以Egor非常有帮助。谢谢Egor。

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

删除%1和%2以删除颜色标签

这是我在我的代码中使用Egor的解决方案的方法:

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

myvar = gsub(myvar, "(|cffffffff)[^|]*(|r)",  "%1" .. newvar .. "%2")
print(myvar)
2019-09-29 16:07:32