如何解决正则表达式,用于将字符串匹配为单词,但保留多个空格
这就是我的期望。我有一个包含数字的字符串,需要将其更改为字母(一种密码),并使用空格将其转换为不同的字母,并且有一个三倍空格表示输出中的空格。例如,字符串"394 29 44 44 141 6"
将被解密为“ Hell No”。
function string.decrypt(self)
local output = ""
for i in self:gmatch("%S+") do
for j,k in pairs(CODE) do
output = output .. (i == j and k or "")
end
end
return output
end
即使它正确解密了数字,我也不使用空格键。因此,我上面使用的字符串解密为“ HellNo”,而不是预期的“ Hell No”。我该如何解决?
解决方法
您可以使用
CODE = {["394"] = "H",["29"] = "e",["44"] = "l",["141"] = "N",["6"] = "o"}
function replace(match)
local ret = nil
for i,v in pairs(CODE) do
if i == match then
ret = v
end
end
return ret
end
function decrypt(s)
return s:gsub("(%d+)%s?",replace):gsub(" "," ")
end
print (decrypt("394 29 44 44 141 6"))
输出将包含Hell No
。参见Lua demo online。
此处,(%d+)%s?
中的s:gsub("(%d+)%s?",replace)
匹配并捕获一个或多个数字,并且仅匹配可选的空格(带有%s?
),捕获的值将传递到replace
函数,将其映射到CODE
中的char值。然后,用gsub(" "," ")
将所有双精度空格替换为单个空格。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。