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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua语言的字符串替换函数的使用方法问题。相关的知识,希望对你有一定的参考价值。

14:9f:e8:5c:06:0d

如何string.find 和 string.gsub 这两个函数 把上面的字符串改成下面的样子,就是把冒号:去掉。

149fe85c060d

参考技术A str = "14:9f:e8:5c:06:0d";
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语言的字符串替换函数的使用方法问题。的主要内容,如果未能解决你的问题,请参考以下文章

lua 写一个函数,传入一个字符串,怎么判断字符串中是不是有中文?

Lua模式匹配

Lua模式匹配

Lua模式匹配

Lua 中与字符串有关的函数学习

lua语言 如何将字符串整体转换为一个十进制数据 而不按照每个字符转为若干个十进制数