提取双引号之间的字符

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)

【讨论】:

以上是关于提取双引号之间的字符的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中用单引号或双引号提取字符串

正则表达式多引号选择

如何截取双引号之间的字符串

Python,在双引号之间的字符串中检测带有引号的字符[关闭]

c语言中如何输入双引号

javascript中双引号和单引号之间的歧义