这可能很容易完成,但我无法找出产生我想要的结果的最优雅和最简单的方法。基本上,一个文本文件作为输入发送到我的程序。此文件中的所有字符串均由回车符 (\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 循环中的行
并将它们输入到表中。我尝试过以下一些方法:
("(%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/PatternsTutorial和 http://www.lua.org/manual/5.2/manual.html#6.4.1资源,但无法正确获取所有可打印字符,而不是不可打印字符。我希望得到一些建议来帮助我理解我做错了什么以及我正在寻找的方法的答案?
最佳答案
正如 EgorSkriptunoff 在评论中所说,使用 %g
应该可以做到你想要的,但你需要记住它不会捕获任何空格,所以如果你的行包含混合可打印和空格字符,您需要使用如下内容:
for lines in input:gmatch("[%g ]+") do
这会在您显示的输入上生成以下三行:
DFEIJ-SDFA
DAFK-DAFDAFEA
DKLAJFDAKJFE-DFAKJ
关于string - 模式匹配以不同的非打印字符结尾的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37417481/