2

次のような「単語」の文字列がありますfIsh mOuntain rIver。単語はスペースで区切られており、「単語」の定義を簡略化するために、文字列の最初と最後にスペースを追加しました。

、 、またはを含むすべての単語を に置き換えA、 、、BまたはC1含むすべての単語を に置き換え、残りのすべての単語を に置き換える必要があります。XYZ23

 the CAT ATE the Xylophone

Aまず、 、B、またはCを含む単語を に置き換えると1、文字列は次のようになります。

 the 1 1 the Xylophone

X次に、、、YまたはZを含む単語を に置き換えると2、文字列は次のようになります。

 the 1 1 the 2

最後に、残りのすべての単語を に置き換えます3。例:

 3 1 1 3 2

最終的な出力は、間にスペースが入った数字のみを含む文字列です。

  • 単語には、任意の種類の記号が含まれる場合があります。たとえば$5鱼fish、単語を使用できます。単語の始まりと終わりを定義する唯一の機能はスペースです。
  • 一致は、2 つの一致を含む可能性のある単語 (たとえば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

Luaのgsub関数/メソッドは、文字列を置換し、文字列内で文字列が見つかった回数をチェックするために使用されます。gsub(string old, string from, string to)

local str = "Hello, world!"

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

さようなら、世界!1

newStr は「さようなら、世界!」"Hello" ( ) は str で 1 回しか見つからなかったため、再帰が 1fromに変更されたためです。tofrom

于 2012-10-18T20:37:40.513 に答える