Lua中的正規表示式的使用

2022-08-20 19:45:09 字數 2441 閱讀 1452

今天需要寫乙個解析csv到lua的小工具,其中用到了 lua庫中的string.gsub(),之前一直對這個方法不是很了解,今天終於好好試了一把,很強大,很過癮,很方便。。。

源csv檔案是:

等級,1階所需經驗,2階所需經驗,3階所需經驗,4階所需經驗,5階所需經驗,每個格仔所需金幣

1,75,90,100,110,120,63

2,98,117,130,143,156,66

3,130,156,173,190,208,69

4,173,207,230,253,276,72

轉換後的要求的格式是:

1

local lvlexp =, --

13 , --

24 , --

35 , --46

}78return lvlexp

那麼我寫的小工具是:

--[[

--- switchcsvtolua: 轉換csv -- 此處是匹配魔物公升級表的轉換器

- @param: ... - csv 檔案路徑

]]function

switchcsvtolua(...)

--local frompath = "/users/guy/desktop/creepupgrade/lvlexp.csv"

local arg =

local frompath = arg[1

]

local filef = assert(io.open(frompath, "r+"

))

--local frompath = "/users/guy/desktop/creepupgrade/lvlexp.lua"

local topath = string_gsub(frompath, "

/%a+.csv

", function(h) --

匹配路徑中的 /lvlexp.csv

return string_gsub(h, "

.csv

", "

.lua

") --

替換.csv 為 .lua

end)

local filet = assert(io.open(topath, "w+"

)) filef:read()

--拋棄第一行索引

local filetitle = "

local lvlexp = \n\nreturn lvlexp

"filet:write(filetitle)

local lineindex = 1

local nextline =filef:read()

while nextline do

--只要下一行存在即寫入

local aline =string.trim(nextline)

local beginindex = string_find(aline, "

,") + 1

--找到第乙個 , 的座標

local len =string_len(aline)

aline = string_sub(aline, beginindex, len) --

刪除每行的 第乙個索引元素

aline = "

, --

" .. lineindex .. "\n"

--為每一行新增 lua**格式

aline = string_gsub(aline, "

,%d+}

", function(h) --

匹配每行的最後乙個數字

return string_gsub(h, "

,", "

, coin =

") --

為這個數字新增乙個索引

end)

filet:write(aline)

nextline =filef:read()

lineindex = lineindex + 1

endfilet:write(filefinish)

filef.close()

filet.close()

end--[[

--- switchcsvtolua: 轉換csv

- @param: ... - csv 檔案路徑

]]switchcsvtolua(...)

注意上面的**中的類似 string_gusd() 這樣的函式是我在檔案的上面 宣告了 local string_gusd = string.gusd ,即lua庫中的函式,希望讀者不要迷惑,此處是為了提高效率才寫成了區域性變數,不要糾結。。。

下面貼出我在使用 string.gusd()時用到的正規表示式的參考的帖子,

**自 感謝原作者。

模式匹配函式

lua中的正規表示式

lua中的正規表示式與posix的正規表示式有一些區別。產生區別的主要原因在於lua追求與標準庫的短小精悍,而完成完整的posix正則需要4000行以上的 lua不願意為此犧牲簡介性,所以在正則的規則上有所妥協。下表列出lu支援的所有字元類 字元類說明 任意字元 a字母 c控制字元 d數字 l小寫字...

lua 正規表示式使用

在使用lua的string庫匹配模式的時候,對於一些比較麻煩的處理,搜網頁總是不得其所,下面是接觸到的一些經典用法 string.find string.gsub string.sub 對這三個方法的基本使用不概述了 現有乙個需求如下 替換 字串 戰鬥力增加 為 戰鬥力增加5 注5是帶入a b值算出...

Lua正規表示式

正規表示式作為一種通用的算式,大量用於文字處理邏輯中,其主要好處是速度能夠達到極致,而且 量通常會非常少,本篇主要介紹lua中的正則使用,由於這樣的文章網上隨處都可以搜到,而且不乏整理的不錯的,這裡就不想再重新做這件事情。正規表示式主要處理匹配問題,即通過給定語義萬用字元串,返回匹配成功的字串列表。...