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

时间:2011-11-21 12:27:57

标签: arrays string lua string-matching

我是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

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

1 个答案:

答案 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

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