Lua string.gsub 里面 string.gmatch?
Lua string.gsub inside string.gmatch?
我创建了这个简单的示例脚本来输出食物列表。如果食物是水果,那么水果的颜色也会显示出来。我遇到的问题是处理 'strawberries.'
的不规则复数
fruits = {apple = "green", orange = "orange", stawberry = "red"}
foods = {"potatoes", "apples", "strawberries", "carrots", "crab-apples"}
for _, food in ipairs(foods) do
for fruit, fruit_colour in pairs(fruits) do
duplicate = false
if (string.match(food, "^"..fruit) or string.match((string.gsub(food, "ies", "y")), "^"..fruit)) and not(duplicate) then -- this is where the troubles is!
print(food.." = "..fruit_colour)
duplicate = true
break
end
end
if not(duplicate) then
print(food)
end
end
现在程序输出:
potatoes
apples = green
strawberries
carrots
crab-apples
我想要的是:
potatoes
apples = green
strawberries = red
carrots
crab-apples
我不明白为什么这不能像我想要的那样工作!
stawberry
应该是 strawberry
。循环将 strawberries
更改为 strawberry
,然后尝试将 strawberry
与 ^stawberry
进行匹配,但拼写错误导致它不匹配。
首先,你在这里拼错了 strawberry:
fruits = {apple = "green", orange = "orange", stawberry = "red"}
您还可以将 lua 表作为集合使用,这意味着无需嵌套循环搜索重复项。它可以简化为:
fruits = {apple = "green", orange = "orange", strawberry = "red"}
foods = {"potatoes", "apples", "strawberries", "carrots", "crab-apples"}
function singular(word)
return word:gsub("(%a+)ies$", "%1y"):gsub("(%a+)s$", "%1")
end
for _, food in ipairs(foods) do
local single_fruit = singular(food)
if fruits[single_fruit] then
print(food .. " = " .. fruits[single_fruit])
else
print(food)
end
end
我创建了这个简单的示例脚本来输出食物列表。如果食物是水果,那么水果的颜色也会显示出来。我遇到的问题是处理 'strawberries.'
的不规则复数fruits = {apple = "green", orange = "orange", stawberry = "red"}
foods = {"potatoes", "apples", "strawberries", "carrots", "crab-apples"}
for _, food in ipairs(foods) do
for fruit, fruit_colour in pairs(fruits) do
duplicate = false
if (string.match(food, "^"..fruit) or string.match((string.gsub(food, "ies", "y")), "^"..fruit)) and not(duplicate) then -- this is where the troubles is!
print(food.." = "..fruit_colour)
duplicate = true
break
end
end
if not(duplicate) then
print(food)
end
end
现在程序输出:
potatoes
apples = green
strawberries
carrots
crab-apples
我想要的是:
potatoes
apples = green
strawberries = red
carrots
crab-apples
我不明白为什么这不能像我想要的那样工作!
stawberry
应该是 strawberry
。循环将 strawberries
更改为 strawberry
,然后尝试将 strawberry
与 ^stawberry
进行匹配,但拼写错误导致它不匹配。
首先,你在这里拼错了 strawberry:
fruits = {apple = "green", orange = "orange", stawberry = "red"}
您还可以将 lua 表作为集合使用,这意味着无需嵌套循环搜索重复项。它可以简化为:
fruits = {apple = "green", orange = "orange", strawberry = "red"}
foods = {"potatoes", "apples", "strawberries", "carrots", "crab-apples"}
function singular(word)
return word:gsub("(%a+)ies$", "%1y"):gsub("(%a+)s$", "%1")
end
for _, food in ipairs(foods) do
local single_fruit = singular(food)
if fruits[single_fruit] then
print(food .. " = " .. fruits[single_fruit])
else
print(food)
end
end