亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Lua 語言如何替換多個可選字符串

Lua 語言如何替換多個可選字符串

月關寶盒 2019-04-14 10:08:35
比如有個包含子串的table : wordLib = {"lua","my","hello","go","主題","你好"} 有個字符串txt = "lua is my style! hello boy ,let`s go,我們的主題曲!"只要wordLib包含了的子串,都替換為" ** ";比如結果應該是:** is ** style!** boy,let`s **,我們的**曲!沒分了,高手幫幫忙吧用其他語言里正則式是可以做到的比如有個詞庫包含了 go ,主題曲,my end 四個子串,不一定是單詞哦把字符串中含有子串的部分替換成 **現有一句話:我們的主題曲開播了,let`s go,my friends,好吧bingo!替換后可以為:我們的**開播了,let`s **,**fri**s,好吧bin**!其他語言實現的效果如下圖:是lua的模式串不能這么弄么
查看完整描述

3 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

這個很簡單啊,做字符串匹配。關鍵你那個替換邏輯有點亂。

【匹配整個單詞】
一般你在編輯器中做文本替換,要替換所有 【匹配整個單詞】 區分大小寫 等選項。

你的那個 屏蔽的單詞集合,明顯分了兩類,但卻沒有區分。

lua my hello go 等式 精確的單詞。比如 go 替換 不可能 替換 bingo 中的 go

主題 你好 等是卻要替換 一個完整單詞(因為匹配一般是靠空格符號匹配的)的一部分。
比如: 替換 "主題" 會把 "主題曲" 中的部分"主題" 替換

【解決方法】先做 包含中文單詞匹配,用空格當然有些bug 還是需要解決的,比如常見的 中文符號,要從匹配中 去除,我給你做個簡單 demo。
你自己處理下 標點符號。

查看完整回答
反對 回復 2019-04-15
?
滄海一幻覺

TA貢獻1824條經驗 獲得超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    預處理的文本

-- @set     預搜索的子串集合

--           

-- @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

 

--  對給定文本中出現的 給定集合中的子串進行替換

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()

--- 輸出結果

--  ** is ** style! ** boy ,let`s **,我們的**曲! Bin**!

【注:】
【1】上面這個demo 是效率很低很低的方法。

【2】附件:簡單屏蔽指定集合中的單詞(含中文)- flameleo.lua

1

2

--- 輸出結果

--  ** is ** style! ** boy ,let`s **,我們的**曲! Bingo!

是一個分別處理模式串和非模式串的方法,需要改進中文分詞算法

 


查看完整回答
反對 回復 2019-04-15
  • 3 回答
  • 0 關注
  • 1758 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號