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

这可能很容易实现,但我无法想出最优雅和简单的方法来产生我想要的结果。 基本上,一个文本文件作为输入发送到我的程序。 此文件中的所有字符串都由回车符('\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","")真的很困扰我。 我觉得我应该能够在我的for循环内部的“lines:gmatch(”%g * %G *“)”行开始处理它,并自动不捕获那些不可打印的字符。 但是我无法弄清楚为什么最好的方法检查是否匹配了\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资源,但未能正确地捕获所有可打印字符而不是非打印字符。 我希望得到一些建议,帮助我了解我做错了什么以及我正在寻找的方法的答案。

点赞
用户1442917
用户1442917

正如EgorSkriptunoff在评论中所说,使用%g应该可以实现你想要的功能,但需要注意的是它不捕获任何空格,因此如果您的行包含可打印和空格字符的混合,您需要使用像这样的语句:

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

这将在您展示的输入上产生以下三行:

DFEIJ-SDFA
DAFK-DAFDAFEA
DKLAJFDAKJFE-DFAKJ
2016-05-24 16:27:57