lua语言的字符串替换函数的使用方法问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua语言的字符串替换函数的使用方法问题。相关的知识,希望对你有一定的参考价值。
14:9f:e8:5c:06:0d
如何string.find 和 string.gsub 这两个函数 把上面的字符串改成下面的样子,就是把冒号:去掉。
149fe85c060d
str2=string.gsub(str, ":", "");
print(str2);追问
149fe85c060d 把这个字符串16进制的转换成10进制,应该怎么写呢?
追答n = tonumber(str2, 16); -- 16表示16进制, 转成数字, 可做加减乘除
str3 = tostring(n); -- 转成字符串
print(n);
print(str3);
如何在 Lua 中替换部分字符串?
【中文标题】如何在 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语言的字符串替换函数的使用方法问题。的主要内容,如果未能解决你的问题,请参考以下文章