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

如何在Lua中查找和替换包含特定字符的单词?,lua,Lua,我有一串“单词”,像这样:鱼山河。单词之间用空格隔开,我在字符串的开头和结尾添加了空格,以简化“单词”的定义 我需要将包含A、B或C的任何单词替换为1,将包含X、Y或Z的任何单词替换为2,并将所有剩余单词替换为3,例如: the CAT ATE the Xylophone 3 1 1 3 2 首先,将包含A、B或C的单词替换为1,字符串变为: the 1 1 the Xylophone the 1 1 the 2 接下来,将包含X、Y或Z的单词替换为2,字符串变为: the 1

我有一串“单词”,像这样:
鱼山河
。单词之间用空格隔开,我在字符串的开头和结尾添加了空格,以简化“单词”的定义

我需要将包含
A
B
C
的任何单词替换为
1
,将包含
X
Y
Z
的任何单词替换为
2
,并将所有剩余单词替换为
3
,例如:

 the CAT ATE the Xylophone
 3 1 1 3 2
首先,将包含
A
B
C
的单词替换为
1
,字符串变为:

 the 1 1 the Xylophone
 the 1 1 the 2
接下来,将包含
X
Y
Z
的单词替换为
2
,字符串变为:

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

 the CAT ATE the Xylophone
 3 1 1 3 2
最后的输出是一个只包含数字的字符串,中间有空格

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

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

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

请尝试以下代码:

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

Lua中的
gsub
函数/方法用于替换字符串,并检查在字符串中找到字符串的次数
gsub(字符串旧、字符串从、字符串到)

再见,世界!一,

newStr是“再见,世界!”,因为
from
被改为
to
,递归是1,因为“Hello”(
from
)在str中只找到一次