3 回答

TA貢獻1880條經(jīng)驗 獲得超4個贊
這個很簡單啊,做字符串匹配。關(guān)鍵你那個替換邏輯有點亂。
【匹配整個單詞】
一般你在編輯器中做文本替換,要替換所有 【匹配整個單詞】 區(qū)分大小寫 等選項。
你的那個 屏蔽的單詞集合,明顯分了兩類,但卻沒有區(qū)分。
lua my hello go 等式 精確的單詞。比如 go 替換 不可能 替換 bingo 中的 go
主題 你好 等是卻要替換 一個完整單詞(因為匹配一般是靠空格符號匹配的)的一部分。
比如: 替換 "主題" 會把 "主題曲" 中的部分"主題" 替換
【解決方法】先做 包含中文單詞匹配,用空格當(dāng)然有些bug 還是需要解決的,比如常見的 中文符號,要從匹配中 去除,我給你做個簡單 demo。
你自己處理下 標(biāo)點符號。

TA貢獻1824條經(jīng)驗 獲得超5個贊
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | --- -- function maskMsg takes string, table, string returns string -- -- @text 預(yù)處理的文本 -- @set 預(yù)搜索的子串集合 -- -- @repl 替換的文本 -- 不指定則替換成 與字符串長度相等的 "*" -- -- @return 處理后的文本
local function maskMsg ( text, set, repl ) if #text <= 0 then return text end local function maskor ( str ) return repl or string.rep( "*", #str ) end for k, str in pairs(set) do text = string.gsub( text, str, maskor(str) ) end return text end
-- 對給定文本中出現(xiàn)的 給定集合中的子串進行替換 text = "lua is my style! hello boy ,let`s go,我們的主題曲! Bingo!" wordLib = {"lua","my","hello","go","主題","你好"} local function main () local msg = maskMsg ( text, wordLib, "**") print(msg)
end main() --- 輸出結(jié)果 -- ** is ** style! ** boy ,let`s **,我們的**曲! Bin**! |
【注:】
【1】上面這個demo 是效率很低很低的方法。
【2】附件:簡單屏蔽指定集合中的單詞(含中文)- flameleo.lua
1 2 | --- 輸出結(jié)果 -- ** is ** style! ** boy ,let`s **,我們的**曲! Bingo! |
是一個分別處理模式串和非模式串的方法,需要改進中文分詞算法
- 3 回答
- 0 關(guān)注
- 1755 瀏覽
添加回答
舉報