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

标签 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 循环中的并将它们输入到表中。我尝试过以下一些方法:

("(%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资源,但无法正确获取所有可打印字符,而不是不可打印字符。我希望得到一些建议来帮助我理解我做错了什么以及我正在寻找的方法的答案?

最佳答案

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

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

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

DFEIJ-SDFA
DAFK-DAFDAFEA
DKLAJFDAKJFE-DFAKJ

关于string - 模式匹配以不同的非打印字符结尾的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37417481/

相关文章:

python - 基于某种格式的字符串排序

lua - 替换字符串 Lua 上的最后一个逗号

function - Lua:本地函数的作用域

lua - kong环境下出现错误 "plugin is in use but not enabled"

java - 在 java 中使用 .* 替换字符串内容

haskell - 模式匹配时不同数量的参数可能

Java格式化字符串来替换特殊字符

c++ - 当我需要一个字符串时,我可以用 unsigned char* 做什么?

Java如何检查字符串值是否是给定Class<?>的类型

scala - 如何避免 Scala 中使用模式匹配的 def 定义的语法开销?