gpt4 book ai didi

arrays - 用于查找和替换文本的 Lua 字符串库选择

转载 作者:行者123 更新时间:2023-12-04 06:07:18 27 4
gpt4 key购买 nike

我是 Lua 编程的新手,从 python 过来基本上为 friend 制作了一个魔兽世界的小插件。我正在研究从相当大的纯文本字符串中查找一段文本的各种方法。我需要从我需要的文本中提取信息,然后以通常的方式对其进行处理。

文本字符串可以是任何东西,但是下面是我们要提取和处理的内容

-- GSL --
items = ["itemid":"qty" ,"itemid":"qty" ,"itemid":"qty" ,]
-- ENDGSL --

我们想从围绕它的潜在大文本块中剥离整个文本块,然后删除 -- GSL -- 和 -- ENDGSL -- 留下:
items = ["itemdid":"qty …

我研究了各种方法,但似乎无法理解其中任何一种方法。

有人对解决这个问题的最佳方法有什么建议吗?

编辑:附加问题,

根据接受的答案,我将代码稍微更改为以下内容。
function GuildShoppingList:GUILDBANKFRAME_OPENED()
-- Actions to be taken when guild bank frame is opened.
if debug == "True" then self:Print("Debug mode on, guild bank frame opened") end
gslBankTab = GetCurrentGuildBankTab()
gslBankInfo = GetGuildBankText(gslBankTab)
p1 = gslBankInfo:match('%-%- GSL %-%-%s+(.*)%s+%-%- ENDGSL %-%-')
self:Print(p1)
end

字符串现在略有变化,我们正在解析的信息是
{itemid:qty, itemid:qty, itemid:qty, itemid:qty}

现在,这是一个在 p1 中被调用的字符串。我还需要更新 s:match 方法以去除 { } ,并迭代每个项目及其分隔的键,所以我只剩下
itemid:qty
itemid:qty
itemid:qty
itemid:qty

然后我可以单独识别每一行并将其放在需要去的地方。

最佳答案

尝试

s=[[-- GSL --
items = ["itemid":"qty" ,"itemid":"qty" ,"itemid":"qty" ,]
-- ENDGSL --]]
print(s:match('%-%- GSL %-%-%s+(.*)%s+%-%- ENDGSL %-%-'))

关键可能是 -是一个模式修饰符,如果您想要文字连字符,则需要引用。更多关于图案的信息 in the Lua Reference Manual, chapter 5.4.1

编辑:
对于遍历几乎是数组的键的附加问题,您可以做两件事:

假设键和数量都是整数,则将其作为字符串循环:
 p="{1:10, 2:20, 3:30}"
for id,qty in p:gmatch('(%d+):(%d+)') do
--do something with those keys:
print(id,qty)
end

或者稍微改变一下字符串,把它作为一个 Lua 表来评估:
 p="{1:10, 2:20, 3:30}"
p=p:gsub('(%d+):','[%1]=') -- replace : by = and enclose keys with []
t=loadstring('return '..p)() -- at this point, the anonymous function
-- returned by loadstring get's executed
-- returning the wanted table
for k,v in pairs(t) do
print(k,v)
end

如果键或数量的格式不是简单的整数,则在模式中更改它应该是微不足道的。

关于arrays - 用于查找和替换文本的 Lua 字符串库选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8211785/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com