Lua: 替换子字符串

3

我有一个类似于以下的东西:

str = "What a wonderful string //011// this is"

我需要用类似convertToRoman(011)的东西来替换//011//,然后得到结果。
str = "What a wonderful string XI this is"

然而,将其转换为罗马数字在这里并不成问题。 另外,字符串str可能没有//...//。这种情况下应该返回相同的字符串。

function convertSTR(str)
  if not string.find(str,"//") then 
    return str 
  else 
    replace //...// with convertToRoman(...)
  end
  return str
end

我知道可以使用string.find方法获取完整的\\...\\序列。是否有更简单的解决方案,例如使用模式匹配或类似的东西?

2个回答

4

string.gsub可以接受一个函数作为替换。因此,这个应该可以工作。

new = str:gsub("//(.-)//", convertToRoman)

1

我喜欢LPEG,因此这里提供一个使用LPEG的解决方案:

local lpeg = require"lpeg"
local C, Ct, P, R = lpeg.C, lpeg.Ct, lpeg.P, lpeg.R

local convert = function(x)
    return "ROMAN"
end

local slashed = P"//" * (R("09")^1 / convert) * P"//"
local other = C((1 - slashed)^0)
local grammar =  Ct(other * (slashed * other)^0)

print(table.concat(grammar:match("What a wonderful string //011// this is"),""))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接