Lua:string.rep 嵌套在 string.gsub 中?

Lua: string.rep nested inside string.gsub?

我希望能够获取一个字符串并在删除该数字的同时重复该数字后面的每个子字符串。例如“5 北,3 西”--> "north north north north north, west west west"。这是我试过的:

test = "5 north, 3 west"
test = test:gsub("(%d) (%w+)", string.rep("%2 ", tonumber("%1")) )
Note(test)

但我只是收到类似 "number expected got Nil."

的错误

您需要使用函数作为 gsub 的第二个参数:

test = "5 north, 3 west"
test = test:gsub("(%d) (%w+)",
  function(s1, s2) return string.rep(s2.." ", tonumber(s1)) end)
print(test)

这会打印 north north north north north , west west west.

要对 Kulchenko 的回答进行一些改进:

test = "5 north, 3 west"
test = test:gsub("(%d+) (%w+)",
  function(s1, s2) return s2:rep(tonumber(s1),' ') end)
print(test)

改进:

  • 逗号前无space
  • 允许数字超过 9 (%d+) 而不是 (%d)