使用regexextract解析JSON

wb1gzix0  于 2023-03-13  发布在  其他
关注(0)|答案(5)|浏览(116)

你能帮我解析Google工作表单元格中的一些JSON内容吗?
我可以用正则表达式捕获组匹配第一个模式,但不能匹配下面的模式。我没有成功地放置/gmi选项或从其他一些代码示例中修改我的情况,我又浪费了两天的时间。非常感谢。
单元格中的json:

[
{"idcode":"1AGLG";parent:"1A";level:"Genus";title:"Aglaonema";IsGroup:true};
{"idcode":"1ALDG";parent:"1A";level:"Genus";title:"Alocasia";IsGroup:true};
{"idcode":"1BBSG";parent:"1A";level:"Genus";title:"Ambrosina";IsGroup:true};{"idcode":"1AMUG";parent:"1A";level:"Genus";title:"Amorphophallus";IsGroup:true}
]

我的公式:

REGEXEXTRACT(A1; """idcode"":""([\w]+)""(?:.*?title:"")([\w]+)""")

和图纸文件:https://docs.google.com/spreadsheets/d/17YSCK2S8IeqFE_Y_kqWQLVwT9VONXkxvCY3Hlr-8Xpc/edit

bt1cpqcv

bt1cpqcv1#

这个样品配方怎么样?

样品配方:

=ARRAYFORMULA(TRIM(SPLIT(TRANSPOSE(SPLIT(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(A1,"[\[{}\]]",""),"""idcode"":""([\w]+)""(?:.*?title:"")([\w]+)"";IsGroup:true;?","$1,$2,"),"(([\w\s\S]+?,){2})","$1@"),"@")),",")))
  • 在此示例公式中,[{"idcode":"1AGLG";parent:"1A";level:"Genus";title:"Aglaonema";IsGroup:true};{"idcode":"1ALDG";parent:"1A";level:"Genus";title:"Alocasia";IsGroup:true};{"idcode":"1BBSG";parent:"1A";level:"Genus";title:"Ambrosina";IsGroup:true};{"idcode":"1AMUG";parent:"1A";level:"Genus";title:"Amorphophallus";IsGroup:true}]的值放入单元格“A1”中。
  • 此公式的流程如下。

1.使用REGEXREPLACE将原始值中的[\[{}\]]替换为""
1.使用REGEXREPLACE将第一个替换值中的""idcode"":""([\w]+)""(?:.*?title:"")([\w]+)"";IsGroup:true;?替换为$1,$2,

结果:

注:

  • 另一种方法是,下面的示例公式可以得到与上述公式相同的结果,在该公式中,SPLIT使用@,两次。
=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(REGEXREPLACE(REGEXREPLACE(A1,"[\[{}\]]",""),"""idcode"":""([\w]+)""(?:.*?title:"")([\w]+)"";IsGroup:true;?","$1,$2@"),"@")),","))
  • 如果,@包含在原始值中,请更改上述公式。

参考文献:

gmol1639

gmol16392#

您还可以使用以下公式,其中我们使用2个捕获组,REGEXREPLACEJOIN函数REGEXEXTRACT相结合,以获得更多 “灵活性”
在这两种情况下,ArrayFormulaSPLIT函数都是必须的:

作为单个单元格

=ArrayFormula(JOIN(" / ",REGEXREPLACE(SPLIT($A1,"};{",0), 
                                         ".*(\d\D{2,5})"".*""(\D+)"".*$","$1 - $2")))

在一行中的单独单元格中

={ArrayFormula(REGEXEXTRACT(SPLIT($A1,"};{",0),"(\d\D{2,5})"""));
  ArrayFormula(REGEXEXTRACT(SPLIT($A1,"};{",0),".*""(\D+)"".*$"))}

作为列表在单独的单元格中

={ArrayFormula(TRANSPOSE(REGEXEXTRACT(SPLIT($A1,"};{",0),"(\d\D{2,5})"""))),
  ArrayFormula(TRANSPOSE(REGEXEXTRACT(SPLIT($A1,"};{",0),".*""(\D+)"".*$")))}

使用的功能:

0md85ypi

0md85ypi3#

最后,我混合了这两个公式,以便指定targeted标志并匹配它们后面的多个单词:

=ARRAYFORMULA(join(" ; ";TRANSPOSE(SPLIT(REGEXREPLACE(REGEXREPLACE(A1;"[\[{}\]]";"");"""idcode"":""(\d\D{2,5})""(?:.*?title:"")(\D+)"";IsGroup:true;?";"$1
= $2@");"@"))))
wkyowqbh

wkyowqbh4#

提取给定模式后引号之间的任何内容(这里是单词“parent”)(受marikamitsos启发)

=ArrayFormula(JOIN(" ; ";REGEXREPLACE(SPLIT($B20;"};{";0); 
                                         ".*(parent):""((.+?))"".*$";"$1 = $2")))
olqngx59

olqngx595#

提取3个给定模式(此处为“flag 1”、“parent”、“3rdFlag”)后的括号内字符串

json文本示例:

[{“标志1”:“1AGLG”;父代:“1A是第二个检索”;级别:“属”;3rdFlag:“Aglaonema是我喜欢的方式”};{“标志1”:“1ALDG”;父项:“12 A是第二个检索”;级别:“属”;第3个标志:“阿洛西亚”;{“标志1”:“1AOWG”;父代:“BA是第二个检索”;级别:“属”;第3面旗帜:“锚鱼”;{“标志1”:“1个AUIG”;父代:“1A是第二个检索”;级别:“属”;第三面旗帜:“阿努比亚”;{“标志1”:“1AQOG”;父级:“2CA是第二个检索的CA”;级别:“属”;第3个标志:“结尾的拟海鲶”}]

公式:

=ArrayFormula(JOIN(" ; ";REGEXREPLACE(SPLIT($B24;"};{";0); 
                                         ".*(flag1"":""(.+?)"")(.+?)(parent:""(.+?)"")(.+?)(3rdFlag:""(.+?)"").*$";"$2 / $5 / $8")))

结果:

1AGLG / 1A是第二次找回/ Aglaonema是我喜欢的方式;1ALDG /12 A是第二个回收的/ Alocasia ;1AOWG / BA是第二个回收/锚定烷;1AUIG / 1A是第二个收回的/ Anubias ;1AQOG / 2CA是第二个回收的/ Ariopsis在最后

相关问题