我是Lua编程的新手,从python过来基本上为朋友制作了一个小魔兽世界。我正在研究从相当大的纯文本字符串中查找文本部分的各种方法。我需要从我需要的文本中提取信息,然后以通常的方式处理它。
文本字符串可以是任意数字,但以下是我们要提取和处理的内容
-- 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
然后我可以单独识别每一行并将其放在需要去的地方。
答案 0 :(得分:3)
试
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
如果键或数量的格式不是简单整数,那么在模式中更改它应该是微不足道的。