Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex(re2 googlesheets)多行单元格中的多个值_Regex_Google Sheets_Google Sheets Formula_Array Formulas_Re2 - Fatal编程技术网

Regex(re2 googlesheets)多行单元格中的多个值

Regex(re2 googlesheets)多行单元格中的多个值,regex,google-sheets,google-sheets-formula,array-formulas,re2,Regex,Google Sheets,Google Sheets Formula,Array Formulas,Re2,如何通过arrayformula从多行单元格中读取和整理这些值 Im使用正则表达式作为前一行可能会有所不同 请只使用公式,无自定义代码 第一列看起来像一组: ``` [配置] name=名称 纹理=blah.dds 成本=1000 [生效日期0] 值=1000 类型=属性 [生效日期1] 值=8 类型=属性 [功能0] 名称=特征 [组成部分] 0=组件1,1 [参考资料] res_one=1 res_五=1 res_four=1 <br/> Where to be useful

如何通过arrayformula从多行单元格中读取和整理这些值

Im使用正则表达式作为前一行可能会有所不同


请只使用公式,无自定义代码


第一列看起来像一组: ``` [配置] name=名称 纹理=blah.dds 成本=1000 [生效日期0] 值=1000 类型=属性

[生效日期1] 值=8 类型=属性

[功能0] 名称=特征

[组成部分] 0=组件1,1

[参考资料] res_one=1 res_五=1 res_four=1

<br/>
Where to be useful elsewhere, at minimum it needs each [tag] set ([effect\d], [feature\d], ect) to be in one column each, for example the 'effects' column would look like:

//首先是替补 =数组公式(替换(替换($A3:$A,字符(10),“;”),;”,字符(10))) //然后是这一变化(放弃了单行“effect/d”,所以将其拆分以尝试使其工作) =ARRAYFORMULA(IF(A3:A)”,IFERROR(REGEXEXTRACT(A3:A)([effect0]);(.$”&“;”)&&&&IFERROR(REGEXEXTRACT(A3:A),(.m)([effect1]);(.$”&“;”&&IFERROR(REGEXEXTRACT(A3:A),(.m)([effect2]);(.$”&“;”) //然后像上面一样使用regexreplace =数组公式(REGEXREPLACE($B3:$B,“值=();类型=(;;”,“1:$12:$2”))


**--编辑--**
此外,正如我更新的“期望输出”表所示(参见下面的时间戳注释),如果您还可以提取与这些额外列匹配的“类型”值(参见电子表格),那就值得称赞了。
如果你做不到这一切都很好,只是意识到在查找时也需要这样做。
**--编辑结束--**

我尝试了几十种方法,每种方法都被丢弃了,我快速浏览了一下版本历史,找出了两种有希望的方法,并在单独的表格中分享了它们。 其中一个还使用了替换来简化输入列,我很乐意使用原始或替换结果的解决方案。
**可能有用的链接:** https://github.com/google/re2/wiki/Syntax
再多说几句: 我还查看了几十个stackoverflow和google支持页面,所以尝试了REGEXEXTRACT和REGEXREPLACE,这两个页面都很有希望,但都错过了最后的调整。我已经在这两方面做了几十次调整。 任何帮助都会很好,希望将来能帮助其他人,因为电子表格的例子很好,因为每个新的正则表达式似乎都是一次新的冒险;)
另外,如果我们能为OP想出更好的标题,请在评论或回答中说:)
这是一个有趣的练习。:-)

首先要注意:我添加了一些“输入数据”。示例:

[feature1]
name = feature_active_spoiler2

[components]
0 = spoiler,1
1 = spoilerA, 2
因此,输出具有“额外”输出

请参见选项卡。

粘贴到B3

=ARRAYFORMULA(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
 IF(C3:E<>"", C2:E2&":"&C3:E, )),,999^99))), " ", ", "))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&C2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&D2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&E2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[feature\d+\]\nname = (.*)")))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[components\]\n\d+ = (.*)")))
=ARRAYFORMULA(IFNA(REGEXREPLACE(INDEX(SPLIT(REGEXEXTRACT(
 REGEXREPLACE(A3:A, "\n", ", "), "\[resources\], (.*)"), "["),,1), ", , $", )))
粘贴在D3中:

=ARRAYFORMULA(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
 IF(C3:E<>"", C2:E2&":"&C3:E, )),,999^99))), " ", ", "))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&C2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&D2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&E2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[feature\d+\]\nname = (.*)")))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[components\]\n\d+ = (.*)")))
=ARRAYFORMULA(IFNA(REGEXREPLACE(INDEX(SPLIT(REGEXEXTRACT(
 REGEXREPLACE(A3:A, "\n", ", "), "\[resources\], (.*)"), "["),,1), ", , $", )))
粘贴到E3中:

=ARRAYFORMULA(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
 IF(C3:E<>"", C2:E2&":"&C3:E, )),,999^99))), " ", ", "))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&C2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&D2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&E2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[feature\d+\]\nname = (.*)")))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[components\]\n\d+ = (.*)")))
=ARRAYFORMULA(IFNA(REGEXREPLACE(INDEX(SPLIT(REGEXEXTRACT(
 REGEXREPLACE(A3:A, "\n", ", "), "\[resources\], (.*)"), "["),,1), ", , $", )))
粘贴到F3

=ARRAYFORMULA(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
 IF(C3:E<>"", C2:E2&":"&C3:E, )),,999^99))), " ", ", "))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&C2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&D2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&E2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[feature\d+\]\nname = (.*)")))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[components\]\n\d+ = (.*)")))
=ARRAYFORMULA(IFNA(REGEXREPLACE(INDEX(SPLIT(REGEXEXTRACT(
 REGEXREPLACE(A3:A, "\n", ", "), "\[resources\], (.*)"), "["),,1), ", , $", )))
粘贴到G3

=ARRAYFORMULA(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
 IF(C3:E<>"", C2:E2&":"&C3:E, )),,999^99))), " ", ", "))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&C2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&D2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&E2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[feature\d+\]\nname = (.*)")))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[components\]\n\d+ = (.*)")))
=ARRAYFORMULA(IFNA(REGEXREPLACE(INDEX(SPLIT(REGEXEXTRACT(
 REGEXREPLACE(A3:A, "\n", ", "), "\[resources\], (.*)"), "["),,1), ", , $", )))
粘贴到H3

=ARRAYFORMULA(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
 IF(C3:E<>"", C2:E2&":"&C3:E, )),,999^99))), " ", ", "))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&C2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&D2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT($A3:$A, "(\d+)\ntype = "&E2)))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[feature\d+\]\nname = (.*)")))
=ARRAYFORMULA(IFNA(REGEXEXTRACT(A3:A, "\[components\]\n\d+ = (.*)")))
=ARRAYFORMULA(IFNA(REGEXREPLACE(INDEX(SPLIT(REGEXEXTRACT(
 REGEXREPLACE(A3:A, "\n", ", "), "\[resources\], (.*)"), "["),,1), ", , $", )))

编辑-对“所需输出”表中的额外列进行轻微更改时,为编辑添加时间戳,以使结果更清晰。极好的解决方案。非常优雅。非常优雅,感谢您展示了复合查询以及SPLIT、REGEXEXTRACT和REGEXREPLACE的用法,这给了我和以后发现这一点的任何人更多的工作:)谢谢您的回答,我明白您的意思,这是一个非常有趣的嵌套;)