提取双引号之间的字符

在我的项目中,我需要从一个设置文件中提取一些参数。 以下是我正在读取的行的一部分,我需要提取的参数是程序前缀。

...  ProgramPrefix="" ReceiveTimeout="80000" ...

我需要提取双引号之间的ProgramPrefix内容。问题是,在这些引号之间的内容可以是任何字母数字字符、符号、空格或根本没有字符。

下面是我当前提取第二个双引号之前任何字符的解决方案,但对于双引号之间有任何内容的情况不起作用

    EOPdefL = string.find(line,"ProgramPostfix=")
    EOPdef = string.match(line,'([^"]+)',EOPdefL+16)

当双引号之间没有任何内容时,EOPdef的输出为:

EOPdef = ReceiveTimeout=

我希望如果没有字符,EOPdef只返回一个空字符串。

EOPdef = ""

编辑: lhf和Piglet提供了一个工作解决方案。捕获双引号之间的0个或多个字符的字符类是以下字符类:

'"(.-)"'

将此字符类实现到我的解决方案中会得到下面的代码:

SOPdefL = string.find(line,"ProgramPrefix=")
SOPdef = string.match(line,'"(.-)"',SOPdefL+14)

原文链接 https://stackoverflow.com/questions/70399145

点赞
stackoverflow用户2858170
stackoverflow用户2858170

问题分析

你的模式存在一个问题,就是试图匹配一个或多个(+)非双引号字符。你需要匹配0个或多个最短匹配(-)。

有多种方法可以实现这一点。

最显然的如lhf所建议的那样,你可以捕获双引号之间的0个或多个字符。

str:match('ProgramPrefix="(.-)"')

或者你捕获平衡的双引号对并获得其内容

str:match('ProgramPrefix=%b""'):sub(2,-2)
2021-12-18 09:16:32