来自与此字符串相似的字符串:
|cff00ccffkey:|r值
我需要删除 |cff00ccff 和 |r 才能得到:
键:值
问题在于 |cff00ccff
是颜色代码。我知道它总是以 |c
开头,但接下来的 8 个字符可以是任何内容。因此,我需要一个 gsub 模式来获取 |c
之后的接下来 8 个字符(仅限字母数字)。
我怎样才能在Lua中做到这一点?我尝试过:
local newString = string.gsub("|cff00ccffkey:|r value", "|c%w*", "")
newString = string.gsub(newString, "|r", "")
但这将删除第一个空格之前的所有内容,我不知道如何指定要选择的最大字符数以避免这种情况。
谢谢。
最佳答案
Lua 模式 do not support范围/间隔/限制量词。
您可以重复%w
字母数字模式八次:
local newString = string.gsub("|cff00ccffkey:|r value", "|c%w%w%w%w%w%w%w%w", "")
newString = string.gsub(newString, "|r", "")
print(newString)
-- => key: value
请参阅Lua demo online .
如果您构建像 ('%w'):.rep(8)
这样的模式,您还可以使其更加动态。 :
local newString = string.gsub("|cff00ccffkey:|r value", "|c" ..('%w'):rep(8), "")
参见another Lua demo .
如果您的字符串始终遵循此模式 - |c<8alpnum_chars><text>|r<value>
- 您也可以使用类似的模式
local newString = string.gsub("|cff00ccffkey:|r value", "^|c" ..('%w'):rep(8) .. "(.-)|r(.*)", "%1%2")
这里,模式匹配:
-
^
- 字符串开头 -
|c
- 字面量|c
-
" ..('%w'):rep(8) .. "
- 8 个字母数字字符 -
(.-)
- 第 1 组:任意 0 个以上字符,尽可能少 -
|r
- 一个|r
子串 -
(.*)
- 第 2 组:字符串的其余部分。
%1
和%2
引用捕获到相应组中的值。
关于regex - Lua gsub - 如何在正则表达式模式中设置最大字符限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53362991/