提取双引号之间的字符
Posted
技术标签:
【中文标题】提取双引号之间的字符【英文标题】:Extracting characters between double quotes 【发布时间】:2022-01-20 17:34:07 【问题描述】:在我的项目中,我需要从设置文件中提取一些参数。 下面是我正在阅读的行的一部分,我需要提取的参数是程序前缀。
... 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)
【问题讨论】:
试试s:match('ProgramPrefix="(.-)"')
。
【参考方案1】:
您的模式的一个问题是您尝试匹配一个或多个 (+
) 非双引号字符。您需要匹配 0 个或多个,最短匹配 (-
)。
有多种方法可以实现这一点。
最明显的是 lhf 已经建议您在双引号之间捕获 0 个或更多字符。
str:match('ProgramPrefix="(.-)"')
或者你捕获一个平衡的双引号对并获取它的内容
str:match('ProgramPrefix=%b""'):sub(2,-2)
【讨论】:
以上是关于提取双引号之间的字符的主要内容,如果未能解决你的问题,请参考以下文章