如何在lua中删除多行字符串

如何在lua中将多行字符串转换为单行字符串?

我尝试过:

function removeMultilines(str)
    return str:gsub("\n")
end

但它不起作用。

所以基本上,我想将 str1 转换为 str2

local str1 = [[嘿,
你今天怎么样?
你叫什么名字?]]

local str2 = "嘿,你今天怎么样?你叫什么名字?"

有没有人知道如何可能做到这一点?任何帮助都欢迎,只需评论 :D

点赞
用户7396148
用户7396148

Lua 5.3 参考手册:string.gsub (s, pattern, repl [, n])

返回一个字符串 s 的副本,其中所有(或前 n 个,如果指定)匹配 pattern(参见§6.4.1)的部分都被替换为 repl 指定的替换字符串,该字符串可以是字符串、表或函数。gsub 还返回其第二个值,即发生的总匹配数。gsub 的名称来自全局匹配(Global SUBstitution)。

Programming in Lua: 20.1-模式匹配函数 的末尾介绍了一个例子:

s = string.gsub("Lua is cute", "cute", "great")
print(s)         --> Lua is great

正确使用 string.gsub 需要提供字符串,模式 "\n" 和要替换匹配的值 " "

local str2 = str1:gsub("\r?\n", " ") --`\n` 表示换行符
                                     --`\r?` 加入一些处理,以处理不同的行尾

或者,您可以使用 string.gmatch,但是 string.gsub 更适用于替换。

对于您的情况,正确使用可能如下所示:

function removeMultilines(str)
    local lines = str:gmatch("([^\r\n]+)\r?\n?")
    local output = lines()

    for line in lines do
        output = output .. " " .. line
    end

    print(output)
    return output
end
2021-01-04 17:32:44
用户107090
用户107090

removeMultilines 函数中使用 str:gsub("\n"," ") 将换行符替换为空格。

使用 str:gsub("\n+"," ") 来合并空白行。

2021-01-04 23:48:13