用于将字符串匹配到单词但保留多个空格的正则表达式
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(" ", " ")
。
这是我所期望的。我有一个包含数字的字符串需要更改为字母(一种密码)和 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(" ", " ")
。