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

Posted

技术标签:

【中文标题】如何在 Lua 中替换部分字符串?【英文标题】:How can I replace part of a string in Lua? 【发布时间】:2020-01-28 13:24:16 【问题描述】:

我在 Lua 中有这个字符串:

"The |cffffffffcar|r is here."

如何使用string.gsub()|cffffffff|r 之间的内容替换为不同的词?请注意,它不一定是car,它可以是我需要替换的任何单词,但它始终介于|cffffffff|r 之间。

我不知道要替换的单词之前或之后有多少个单词,所以我无法进行简单的字数统计或字符数统计。 GSUB 必须替换 |cffffffff|r 之间的任何内容,无论它们在字符串中的什么位置。这是解决问题的关键。

谢谢。

【问题讨论】:

input:gsub("(|cffffffff)[^|]*(|r)", "%1another-car%2") 移除 %1%2 以移除颜色标签 非常感谢,这非常有效。我非常感动和高兴。如果您将此答案放在单独的评论中,我可以标记它,以便您获得荣誉。 【参考方案1】:

这是使用gsub的一种方法:

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

打印出来:

The |BLAH|r is here.

这里的逻辑是我们在两个单独的捕获组中捕获两个管道| 两侧的文本。然后,我们使用两个捕获组将您想要的输出拼接在一起,并将新字符串夹在管道之间。

【讨论】:

我该怎么做才能让它不打印 |或 r。我希望它只打印 BLAH 在这里。你也有 [|] 来检查 | (单个字符)。有没有办法检查像 [blah] 这样的词? @Egor Skriptunoff 提供了正确答案,但也非常感谢您的帮助。对问题有不同的角度是很好的。【参考方案2】:

Egor Skriptunoff 发布了正确答案,但我无法将其标记为评论线程中的答案。如果 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)

【讨论】:

请注意,如果您的内容包含其他特殊序列(例如 ||),这将不匹配。要解决这个问题,您要么需要多次通过,要么需要更强大的系统,例如 PEG。 是的,但 Egor 的解决方案适用于我最初的问题。感谢 Egor,我已经更新了我的答案以包含我正在使用的实际代码。

以上是关于如何在 Lua 中替换部分字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何迭代Lua字符串中的单个字符?

lua中怎么替换掉字符串中的$^特殊字符?

如何使脚本影响 Roblox LUA 中的所有子级?

lua语言的字符串替换函数的使用方法问题。

lua正则分割字符串求助

lua里面如何require一串lua格式的字符串