2012-10-18 113 views
2

我有一串「單詞」,像這樣:fIsh mOuntain rIver。單詞之間用空格隔開,我在字符串的開頭和結尾添加了空格以簡化「單詞」的定義。如何在Lua中查找和替換包含特定字符的單詞?

我需要更換含AB,或C任何話,用1,含XY,或Z2,任何文字與3所有剩餘的話,如:

the CAT ATE the Xylophone 

第一,將含有ABC的文字替換爲1,字符串變爲:

the 1 1 the Xylophone 

接着,更換包含字XY,或Z2,該字符串變爲:

the 1 1 the 2 

最後,它取代所有剩餘的字與3,例如:

3 1 1 3 2 

的最終輸出是一個只包含數字的字符串,其間有空格。

  • 這些詞可能包含任何種類的符號,例如:$5魚fish可以是一個詞。定義單詞開始和結尾的唯一特徵是空格。
  • 這些匹配是按順序找到的,以便可能包含兩個匹配的詞(例如, ZebrA,簡單替換爲1
  • 該字符串是UTF-8。

如何用數字替換包含這些特殊字符的所有單詞,最後用3替換所有剩餘單詞?

回答

7

試試下面的代碼:

function replace(str) 
    return (str:gsub("%S+", function(word) 
    if word:match("[ABC]") then return 1 end 
    if word:match("[XYZ]") then return 2 end 
    return 3 
    end)) 
end 

print(replace("the CAT ATE the Xylophone")) --> 3 1 1 3 2 
0

Lua中gsub功能/方法用於替換字符串,並檢查出怎樣次串在字符串中找到。 gsub(string old, string from, string to)

local str = "Hello, world!" 

newStr, recursions = str:gsub("Hello", "Bye")) 
print(newStr, recursions) 

再見,世界! 1

newStr是「再見,世界!」因爲from被更改爲to,並且遞歸爲1,因爲「Hello」(from)僅在str中找到一次。

相關問題