用于将字符串匹配到单词但保留多个空格的正则表达式

regex for matching a string into words but leaving multiple spaces

这是我所期望的。我有一个包含数字的字符串需要更改为字母(一种密码)和 spaces 以移动到不同的字母,并且有一个三重 spaces 代表 space 在输出中。比如字符串"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

尽管它能正确解密数字,但我无法使用 spacebars。所以我上面使用的字符串解密成“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? in s:gsub("(%d+)%s?", replace)匹配并捕获一位或多位数字,只匹配一个可选的白色space(带%s?)并将捕获的值传递到 replace 函数,它映射到 CODE 中的 char 值。然后,所有双 space 都替换为单个 space 和 gsub(" ", " ")