如何在Lua中查找和替换包含特定字符的单词?

时间:2012-10-18 15:09:31

标签: lua

我有一串“单词”,如下所示:fIsh mOuntain rIver。单词用空格分隔,我在字符串的开头和结尾添加了空格,以简化“单词”的定义。

我需要将包含ABC的任何字词替换为1,包含XY的所有字词,或Z2,以及所有剩余的3字词,例如:

 the CAT ATE the Xylophone

首先,用A替换包含BC1的字词,字符串变为:

 the 1 1 the Xylophone

接下来,将包含XYZ的字词替换为2,字符串变为:

 the 1 1 the 2

最后,它用3替换所有剩余的单词,例如:

 3 1 1 3 2

最终输出是一个只包含数字的字符串,其间的空格为。

  • 这些单词可能包含任何类型的符号,例如:$5鱼fish可以是一个单词。定义单词开头和结尾的唯一特征是空格。
  • 按顺序找到匹配项,以便可能包含两个匹配项的单词,例如ZebrA只是替换为1
  • 该字符串为UTF-8。

如何用数字替换包含这些特定字符的所有单词,最后用3替换所有剩余单词?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

slnunicode模块提供UTF-8字符串函数。

答案 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中创建一次。