与该字符串相似的字符串:
|cff00ccffkey:|r value
我需要除去| cff00ccff和| r才能得到:
key: value
问题在于|cff00ccff
是一个颜色代码。我知道它总是以|c
开头,但接下来的8个字符可以是任何字符。因此,我需要一个gsub模式来获取|c
之后的接下来的8个字符(仅字母数字)。
如何在Lua中做到这一点?我尝试过:
local newString = string.gsub("|cff00ccffkey:|r value", "|c%w*", "")
newString = string.gsub(newString, "|r", "")
但是这将删除所有内容,直到第一个空格,而且我不知道如何指定要选择的最大字符数来避免这种情况。
谢谢。
答案 0 :(得分:2)
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
是指捕获到相应组中的值。