首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组公式中的行提取

数组公式中的行提取
EN

Stack Overflow用户
提问于 2020-12-31 03:02:14
回答 1查看 88关注 0票数 1

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

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

真实世界的电子表格有一个不确定大小的测试字符串列,根据构建查询的不同,从零项到大约4000项不等。关键字列也是动态的,当系统需要追加或删除关键字时会发生更改。它目前只有60行左右。每个字符串有四个结果的限制,匹配关键字没有特殊的优先级,它们的出现顺序也没有限制。

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

一个简短的例子: My关键字集(列A-并给出‘myWords’的命名范围):

代码语言:javascript
复制
    ate
    blue
    cat
    the cat
    for
    dead
    bob
    alive

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

代码语言:javascript
复制
Bob ate the dead cat
The cat ate live bob
No cat ate live dog
Bob is dead
Bob and the cat are alive

我的预期结果(C栏):

代码语言:javascript
复制
Bob, Ate, Dead, Cat
The Cat, Ate, Bob
Cat, Ate
Bob, Dead
Bob, The Cat, Alive

示例电子表格是这里.

如果我复制下面的公式,我就会得到我的预期结果。

代码语言:javascript
复制
=PROPER(TEXTJOIN(", ",TRUE,ArrayFormula(IFERROR(REGEXREPLACE($A2,REGEXREPLACE($A2,"(?i)("&TEXTJOIN("|",TRUE,myWords)&")","(.*)"),{"$1","$2","$3","$4"})))))

效果好,不想要的方法:

代码语言:javascript
复制
Bob, Ate, Dead, Cat
The Cat, Ate, Bob
Cat, Ate
Bob, Dead
Bob, The Cat, Alive

如果我构造了一个数组公式版本,那么我得到了正确的结果,但都在第一行。

代码语言:javascript
复制
=arrayformula(PROPER(TEXTJOIN(", ",TRUE,IFERROR(REGEXREPLACE($A$2:$A$20,REGEXREPLACE($A$2:$A$20,"(?i)("&TEXTJOIN("|",TRUE,myWords)&")","(.*)"),{"$1","$2","$3","$4"})))))

不想要的结果,首选的方法类型:

代码语言:javascript
复制
Bob, Ate, Dead, Cat, The Cat, Ate, Bob, Cat, Ate, Bob, Dead, Bob, The Cat, Alive

我觉得答案会很简单,令人尴尬--但我就是搞不懂!

更新31/12/2020下面的答案是player0的完美解决方案。此答案已更新了示例电子表格。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-31 03:42:22

用途:

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

最新情况:

代码语言:javascript
复制
=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))), ",$", ))

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65516119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档