模式匹配字符串以不同的非打印字符结尾

时间:2016-05-24 15:09:53

标签: string lua pattern-matching

这可能很容易实现,但我无法找出产生我想要的结果的最优雅和简单的方法。基本上,文本文件作为输入发送到我的程序。此文件中的所有字符串由回车符(\r),新换行符(\n)或两者的组合分隔。

现在,我的功能如下

local function file_Parse(input)
    local inputTbl = {}
    if input then
        for lines in input:gmatch("%g*%G*") do
            lines = lines:gsub("\r\n", "")
            table.insert(inputTbl, #inputTbl + 1, lines)
        end
    end
    return inputTbl
end

现在这是非常基本的。收到的输入将类似于以下内容:

例如

DFEIJ-SDFA\r\nDAFK-DAFDAFEA\r\nDKLAJFDAKJFE-DFAKJ\r\n。现在请记住,我已将\r\n放在我想要的字符串之间。但有时候,我可能会在我想要的字符串之间随机地以不同的顺序混合使用回车和换行符,或者丢失其中一个。这是我的问题。

现在它适用于我上面提供的功能,但是我必须输入lines = lines:gsub("\r\n","")才真正困扰我。我觉得我应该能够在lines:gmatch("%g*%G*")行的for循环开始时处理它,并自动不捕获那些不可打印的字符。但我无法弄清楚我的生活中检查\r\n\r\n(或\n\r)是否匹配的最佳方式,可打印的字符,忘记了不可打印的字符。

我试图尝试不同的方法,但在大多数情况下,它似乎没有在我的for循环中捕获lines并将它们输入到表中。我尝试了以下一些方法:

("(%g*%G*)[\r\n]")

("(%g*%G*)[\r*\n*]")

("(%g*%G*)[\r-\n-]")

("(%g*%G*)[\r?\n?]")

("(%g*%G*)[%c]")

("(%g*%G*)[%c-]")

("(%g*%G*)[%c+]")

我已经阅读了http://lua-users.org/wiki/PatternsTutorialhttp://www.lua.org/manual/5.2/manual.html#6.4.1资源,但未能正确抓取所有可打印字符,而不是非可打印字符。我很感激一些建议,以帮助我理解我做错了什么,以及我正在寻找的方法的答案?

1 个答案:

答案 0 :(得分:2)

正如EgorSkriptunoff在评论中所说,使用%g应该做你想要的,但你需要记住它不会捕获任何空格,所以如果你的行包含可打印和空格字符的混合,你需要使用这样的东西:

for lines in input:gmatch("[%g ]+") do

这会在您显示的输入上产生以下三行:

DFEIJ-SDFA
DAFK-DAFDAFEA
DKLAJFDAKJFE-DFAKJ