Regex 正则表达式:几个块,行数可变

Regex 正则表达式:几个块,行数可变,regex,Regex,这是我的问题:我试图提取与bloc/id=two/的/amountC/对应的2.0。一个集团总是有一个数量C,但可能没有数量A、B或D 所以我需要解析:[any nb of cars或\n]bloc id=two[any nb of cars或\n]amountC 我已经有了正则表达式来解析这个数字 要分析的数据示例: bloc id="one" { "amountA" : 10.98, "amountB" : 8.0, "amountC" : 9.0, "amountD" : 111.98 }

这是我的问题:我试图提取与bloc/id=two/的/amountC/对应的2.0。一个集团总是有一个数量C,但可能没有数量A、B或D

所以我需要解析:[any nb of cars或\n]bloc id=two[any nb of cars或\n]amountC

我已经有了正则表达式来解析这个数字

要分析的数据示例:

bloc id="one" {
"amountA" : 10.98,
"amountB" : 8.0,
"amountC" : 9.0,
"amountD" : 111.98
},
bloc id="two" {
"amountA" : 1.98,
"amountC" : 2.0,
"amountD" : 3.98
}

您没有描述使用正则表达式的上下文。如注释中所述,如果内容是JSON,您可能应该使用JSON解析器。不过,我会尽量回答你提出的字面问题

在大多数情况下,正则表达式不能跨多个记录行很好地工作。如果从命令行运行,可以使用awk或sed作为过滤器。假设内容位于名为content的文件中,则可以使用以下内容:

塞德

调用awk并初始化标志以忽略行。 如果发生了bloc id=2,则开始查找amountC。 忽略bloc id=2之前的前导行。 如果bloc id=2,则查找amountC。 如果找到目标行,则输出其数值。 找到目标,我们就完蛋了。 封闭块 如果不是目标行,请跳到下一行。
请花点时间熟悉编辑器的格式化功能。例如,一个代码块应该缩进四个空格,突出显示它并按Ctrl-K。然后,这看起来不像是正则表达式的作业。JSON解析器似乎是实现这一点的正确工具。
sed -E '1,/bloc id="two"/ { /bloc id="two"/ ! d }
        /.*"amountC" :/ {
             s/.*"amountC" *: *([0-9\.]+).*$/\1/
             q
        }' <content
awk 'BEGIN { Ignore=1 }
     /bloc id="two"/ { Ignore=0 }
     Ignore==1 { next }
     /"amountC"/ {
        print gensub(/.*"amountC" *: *([0-9\.]+).*/,"\\1")
        quit
     }
     // { next }' content