2

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

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

 the CAT ATE the Xylophone

首先,将包含AB或的单词替换C1,字符串变为:

 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

4

3 回答 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
于 2012-10-18T15:27:22.647 回答
1

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

于 2012-10-18T15:17:02.880 回答
0

The gsub function/method in Lua is used to replace strings and to check out how times a string is found inside a string. gsub(string old, string from, string to)

local str = "Hello, world!"

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

Bye, world!    1

newStr being "Bye, world!" because from was change to to and recursions being 1 because "Hello" (from) was only founds once in str.

于 2012-10-18T20:37:40.513 回答