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

我有一个“词”的字符串,像这样:fIsh mOuntain rIver。这些单词由空格分隔,并且我在字符串的开头和结尾添加了空格,以简化“单词”的定义。

我需要将包含ABC的任何单词替换为1,将包含XYZ的任何单词替换为2,并将所有剩余的单词替换为3,例如:

 the CAT ATE the Xylophone

首先,将包含ABC的单词替换为1,字符串变为:

 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

点赞
用户33252
用户33252

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

2012-10-18 15:17:02
用户1008957
用户1008957

尝试下面的代码:

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
2012-10-18 15:27:22
用户1542101
用户1542101

Lua中的gsub函数/方法用于替换字符串并检查一个字符串在另一个字符串中出现的次数。 gsub(string old, string from, string to)

local str = "Hello, world!"

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

Bye, world!  1

newStr是“Bye, world!”,因为 from 被更改为 torecursions 为1,因为 "Hello" (from)在str中只出现一次。

2012-10-18 20:37:40