Google sheets 提取Arrayformula中的行

Google sheets 提取Arrayformula中的行,google-sheets,array-formulas,Google Sheets,Array Formulas,我认为这是一个简单的语法问题。我正在从字符串中提取关键字。关键字集位于列中,源字符串位于单独的列中 我希望相邻列中每个字符串的关键字result在result列的开头使用单个arrayformula类型构造。我可以查询、筛选或任何其他类型的动态数组公式 真实世界的电子表格有一个大小不确定的测试字符串列,范围从零个条目到大约4000个条目,具体取决于构建查询。关键字列也是动态的,在系统需要追加或删除关键字时会发生更改。目前只有大约60行。每个字符串有四个结果的限制,匹配关键字没有特定的优先级,并且

我认为这是一个简单的语法问题。我正在从字符串中提取关键字。关键字集位于列中,源字符串位于单独的列中

我希望相邻列中每个字符串的关键字result在result列的开头使用单个arrayformula类型构造。我可以查询、筛选或任何其他类型的动态数组公式

真实世界的电子表格有一个大小不确定的测试字符串列,范围从零个条目到大约4000个条目,具体取决于构建查询。关键字列也是动态的,在系统需要追加或删除关键字时会发生更改。目前只有大约60行。每个字符串有四个结果的限制,匹配关键字没有特定的优先级,并且对它们的显示顺序没有限制

关键字可以是任意数量的单词。所以“树”和“高树”应该是两排。较长的关键字字符串始终具有优先权。例如,字符串“我的花园里有一棵大树”的关键字结果应该是“大树”,而不是“大树,大树”

举个简单的例子: My关键字集(A列-此处指定了“myWords”的命名范围):

我要测试的字符串(B列):

我的预期结果(C列):

示例电子表格是。

如果我抄下下面的公式,我会得到预期的结果

=PROPER(TEXTJOIN(", ",TRUE,ArrayFormula(IFERROR(REGEXREPLACE($A2,REGEXREPLACE($A2,"(?i)("&TEXTJOIN("|",TRUE,myWords)&")","(.*)"),{"$1","$2","$3","$4"})))))
好的结果,不需要的方法:

Bob, Ate, Dead, Cat
The Cat, Ate, Bob
Cat, Ate
Bob, Dead
Bob, The Cat, Alive
如果我构造了一个arrayformula版本,那么我得到了正确的结果,但都在第一行

=arrayformula(PROPER(TEXTJOIN(", ",TRUE,IFERROR(REGEXREPLACE($A$2:$A$20,REGEXREPLACE($A$2:$A$20,"(?i)("&TEXTJOIN("|",TRUE,myWords)&")","(.*)"),{"$1","$2","$3","$4"})))))
不想要的结果,首选的方法类型:

Bob, Ate, Dead, Cat, The Cat, Ate, Bob, Cat, Ate, Bob, Dead, Bob, The Cat, Alive
我觉得答案将是令人尴尬的简单-但我就是不能得到它

更新日期:2020年12月31日 下面由
player0
给出的答案是完美的解决方案。示例电子表格已使用此答案更新。

使用:

=ARRAYFORMULA(REGEXREPLACE(TRIM(FLATTEN(QUERY(TRANSPOSE(
 PROPER(IFERROR(REGEXREPLACE(B2:B14, REGEXREPLACE(B2:B14, "(?i)("&
 TEXTJOIN("|", 1, myWords)&")", "(.*)"), 
 {"$1,", "$2,", "$3,", "$4,"})))),,9^9))), ",$", ))

更新:

它工作得很好。谢谢你TRIM(flatte(QUERY)(TRANSPOSE)('Jeez,我永远不会想到这一点。我希望其他人也能从中学到我将要学到的东西。非常感谢。将您的解决方案应用于真实世界的数据时,我会遇到一个小问题。如果源字符串以一个以+1结尾的字符结尾(如'V+1'),整个字符串被捕获了4次。你能马上知道为什么会发生这种情况吗?@DeeKay789你能分享一份你的表单或一些样本吗?是的,Thx,我在原始共享中添加了一张“哇”表单。效果很好。非常感谢。祝你2021年愉快
=arrayformula(PROPER(TEXTJOIN(", ",TRUE,IFERROR(REGEXREPLACE($A$2:$A$20,REGEXREPLACE($A$2:$A$20,"(?i)("&TEXTJOIN("|",TRUE,myWords)&")","(.*)"),{"$1","$2","$3","$4"})))))
Bob, Ate, Dead, Cat, The Cat, Ate, Bob, Cat, Ate, Bob, Dead, Bob, The Cat, Alive
=ARRAYFORMULA(REGEXREPLACE(TRIM(FLATTEN(QUERY(TRANSPOSE(
 PROPER(IFERROR(REGEXREPLACE(B2:B14, REGEXREPLACE(B2:B14, "(?i)("&
 TEXTJOIN("|", 1, myWords)&")", "(.*)"), 
 {"$1,", "$2,", "$3,", "$4,"})))),,9^9))), ",$", ))
=ARRAYFORMULA(REGEXREPLACE(TRIM(FLATTEN(QUERY(TRANSPOSE(
 PROPER(IFERROR(REGEXREPLACE(REGEXREPLACE(B2:B14, "\+", "♂"), 
 REGEXREPLACE(REGEXREPLACE(B2:B14, "\+", "♂"), "(?i)("&
 TEXTJOIN("|", 1, Answer!myWords)&")", "(.*)"), 
 {"$1,", "$2,", "$3,", "$4,"})))),,9^9))), ",$", ))