Lua: заменить подстроку - PullRequest
       24

Lua: заменить подстроку

0 голосов
/ 21 ноября 2018

У меня есть что-то вроде

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

Я должен заменить //011// на что-то вроде convertToRoman(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 ]

0 голосов
/ 22 ноября 2018

Мне нравится 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"),""))
0 голосов
/ 21 ноября 2018

string.gsub принимает функцию в качестве замены.Итак, это должно работать

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