从类似的字符串到此字符串:
|cff00ccffkey:|r value
我需要删除|cff00ccff和|r才能获得:
key: value
问题是|cff00ccff
是一个颜色代码。我知道它总是以|c
开头,但接下来的8个字符可以是任何字符。因此,我需要一个gsub模式来获取|c
之后的接下来8个字符(仅限字母数字(。
在卢阿我该怎么做?我试过:
local newString = string.gsub("|cff00ccffkey:|r value", "|c%w*", "")
newString = string.gsub(newString, "|r", "")
但这将删除直到第一个空白的所有内容,我不知道如何指定要选择的最大字符来避免这种情况。
谢谢。
Lua模式不支持范围/区间/限制量词。
您可以重复%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演示。
如果您构建像('%w'):.rep(8)
:这样的模式,您也可以使其更加动态
local newString = string.gsub("|cff00ccffkey:|r value", "|c" ..('%w'):rep(8), "")
请参阅另一个Lua演示。
如果你的字符串总是遵循这个模式——|c<8alpnum_chars><text>|r<value>
——你也可以使用类似的模式
local newString = string.gsub("|cff00ccffkey:|r value", "^|c" ..('%w'):rep(8) .. "(.-)|r(.*)", "%1%2")
看这个Lua演示
在这里,模式匹配:
^
-字符串的开头|c
-文字|c
" ..('%w'):rep(8) .. "
-8个字母数字字符(.-)
-组1:任何0+个字符,尽可能少|r
-一个|r
子串(.*)
-第2组:字符串的其余部分
%1
和%2
是指捕获到相应组中的值。