使用regexextract解析json

使用regexextract解析json,json,regex,google-sheets,Json,Regex,Google Sheets,你能帮我解析一下google sheet单元格中的一些json内容吗?我可以用正则表达式捕获组匹配第一个模式,但不能匹配下面的模式。我没有成功地使用/gmi选项,也没有从其他一些代码示例中修改我的案例,从2天起我又在浪费时间了。非常感谢 单元格中的json: [{idcode:1AGLG;父代:1A;级别:属;标题:龙涎草;IsGroup:true};{idcode:1AALDG;父代:1A;级别:属;标题:芦荟属;IsGroup:true};{idcode:1BBSG;父代:1A;级别:属;标

你能帮我解析一下google sheet单元格中的一些json内容吗?我可以用正则表达式捕获组匹配第一个模式,但不能匹配下面的模式。我没有成功地使用/gmi选项,也没有从其他一些代码示例中修改我的案例,从2天起我又在浪费时间了。非常感谢

单元格中的json: [{idcode:1AGLG;父代:1A;级别:属;标题:龙涎草;IsGroup:true};{idcode:1AALDG;父代:1A;级别:属;标题:芦荟属;IsGroup:true};{idcode:1BBSG;父代:1A;级别:属;标题:龙涎草;IsGroup:true};{idcode:1AMUG;父代:1A;级别:属;标题:魔芋属;IsGroup:true}]

我的公式是: 正则表达式1;idcode:[\w]+?:.*?标题:[\w]+


工作表文件:

这个示例公式怎么样

样本配方: 在此示例公式中,[{idcode:1AGLG;父对象:1A;级别:属;标题:Aglaonema;IsGroup:true};{idcode:1ALDG;父对象:1A;级别:属;标题:Alocasia;IsGroup:true};{idcode:1BBSG;父对象:1A;级别:属;标题:豚草;IsGroup:true};{idcode:1AMUG;父对象:1A;级别:属;标题:魔芋属;IsGroup:true}]的值放入单元格A1中。 该公式的流程如下所示。 使用REGEXREPLACE替换原始值中的[\[{}\]]。 替换ID代码:[\w]+?:.*?标题:[\w]+;IsGroup:true;?在第一个示例中,使用REGEXREPLACE将值替换为$1,$2。 将第二个替换值拆分为两列。 在这种情况下,我使用了。 结果: 注: 与其他方法一样,以下示例公式可以检索到与上述公式相同的结果。在此公式中,使用@和,拆分使用了2次

如果,和@包含在原始值的值中,请更改上述公式

参考资料:
这个样品配方怎么样

样本配方: 在此示例公式中,[{idcode:1AGLG;父对象:1A;级别:属;标题:Aglaonema;IsGroup:true};{idcode:1ALDG;父对象:1A;级别:属;标题:Alocasia;IsGroup:true};{idcode:1BBSG;父对象:1A;级别:属;标题:豚草;IsGroup:true};{idcode:1AMUG;父对象:1A;级别:属;标题:魔芋属;IsGroup:true}]的值放入单元格A1中。 该公式的流程如下所示。 使用REGEXREPLACE替换原始值中的[\[{}\]]。 替换ID代码:[\w]+?:.*?标题:[\w]+;IsGroup:true;?在第一个示例中,使用REGEXREPLACE将值替换为$1,$2。 将第二个替换值拆分为两列。 在这种情况下,我使用了。 结果: 注: 与其他方法一样,以下示例公式可以检索到与上述公式相同的结果。在此公式中,使用@和,拆分使用了2次

如果,和@包含在原始值的值中,请更改上述公式

参考资料:
我们还可以使用以下公式,其中使用2个带有REGEXREPLACE和JOIN函数的捕获组,或者使用REGEXEXTRACT以获得更大的灵活性

在这两种情况下,必须使用ArrayFormula和SPLIT函数:

作为单个细胞 在一行中的单独单元格中 在单独的单元格中作为列表 使用的功能:


我们还可以使用以下公式,其中使用2个带有REGEXREPLACE和JOIN函数的捕获组,或者使用REGEXEXTRACT以获得更大的灵活性

在这两种情况下,必须使用ArrayFormula和SPLIT函数:

作为单个细胞 在一行中的单独单元格中 在单独的单元格中作为列表 使用的功能:


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

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

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

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

根据给定的模式提取引号之间的任何内容此处的单词“parent”灵感来自


根据给定的模式提取引号之间的任何内容此处的单词“parent”灵感来自


在括号之间提取以下3种给定模式的字符串,即“flag1”、“parent”、“3rdFlag”

json文本示例:

[flag1:1AGLG;父:1A是第二个检索;级别:属;第三个flag:Aglaonema是我喜欢的方式;{flag1:1AGLG;父:12A是第二个检索;级别:属;第三个flag:Alocasia};{flag1:1AOWG;父:BA是第二个检索;级别:属;第三个flag:Anchomanes};{flag1:1aig;父:1A是第二个检索;级别:属;第三个flag1:1A:anubia};{flag1:1AQOG;父:2CA是第二个检索;级别:属;第三个flag:Ariopsis在末尾}]

公式:

结果:


1AGLG/1A排在retrive/Aglaonema的第二位,这是我喜欢的方式;1ALDG/12A排在retrive/Alocasia的第二位;1AOWG/BA排在retrive/Anchomanes的第二位;1AUIG/1A排在retrive/Anubias的第二位;1AQOG/2CA排在retrive/ARIOSIA的第二位,后面是retrive/ARIOSIAS的第二位

在括号之间提取字符串,下面是三个给定的模式“flag1”、“父”、“3rdFlag'

json文本示例:

[flag1:1AGLG;父:1A是第二名;级别:属;第三名flag:Aglaonema是我喜欢的方式;{flag1:1AGLG;父:12A是第二名;级别:属;第三名flag:Alocasia};{flag1:1AOWG;父:BA是第二名;级别:属;第三名 旗帜:Anchomanes};{flag1:1aig;父代:1A是第二个检索;级别:属;第三个flag:anubia};{flag1:1AQOG;父:2CA是第二个检索;级别:属;第三个flag:Ariopsis在末尾}]

公式:

结果:


1AGLG/1A排在第二位,是我喜欢的方式;ALDG/12A排名第二,仅次于retrive/Alocasia;1 OWG/BA排名第二,仅次于retrive/Anchomanes;UIG/1A排名第二,仅次于retrive/Anubias;1 QOG/2CA是第二个在结尾处重复/重复的

非常感谢,你的第二个配方很有魅力我第一个配方没有成功非常感谢,你的第二个配方很有魅力我第一个配方没有成功再次感谢你marikamitsos,你的配方很完美,看起来很优雅。对不起,我无法验证两次答案斯坦奈克的公式似乎不那么优雅,但它完全符合我想要的两个答案。我会试着和你的混在一起…我想要的是。你想要什么?我认为它确实符合你的例子。如果您还有其他问题,请告诉我。使用Tanaike的公式,我可以指定带有“标志名”的查询,例如匹配以下父级单词,或者在其他json情况下使用不同的标志。我希望更精确,不管怎样你们都帮我解决了我的问题,请不要责怪我,因为我无法验证两个解决方案。。再次感谢您使用您的原始示例进行测试后,它给了我一个答案。我错过什么了吗?而且你能给我举个例子吗?再次非常感谢marikamitsos,你的配方非常好用,看起来很优雅。对不起,我无法验证两次答案斯坦奈克的公式似乎不那么优雅,但它完全符合我想要的两个答案。我会试着和你的混在一起…我想要的是。你想要什么?我认为它确实符合你的例子。如果您还有其他问题,请告诉我。使用Tanaike的公式,我可以指定带有“标志名”的查询,例如匹配以下父级单词,或者在其他json情况下使用不同的标志。我希望更精确,不管怎样你们都帮我解决了我的问题,请不要责怪我,因为我无法验证两个解决方案。。再次感谢您使用您的原始示例进行测试后,它给了我一个答案。我错过什么了吗?而且你能给我举个例子吗?
=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+)"".*$")))}
=ARRAYFORMULA(join(" ; ";TRANSPOSE(SPLIT(REGEXREPLACE(REGEXREPLACE(A1;"[\[{}\]]";"");"""idcode"":""(\d\D{2,5})""(?:.*?title:"")(\D+)"";IsGroup:true;?";"$1
= $2@");"@"))))
=ArrayFormula(JOIN(" ; ";REGEXREPLACE(SPLIT($B20;"};{";0); 
                                         ".*(parent):""((.+?))"".*$";"$1 = $2")))
=ArrayFormula(JOIN(" ; ";REGEXREPLACE(SPLIT($B24;"};{";0); 
                                         ".*(flag1"":""(.+?)"")(.+?)(parent:""(.+?)"")(.+?)(3rdFlag:""(.+?)"").*$";"$2 / $5 / $8")))