提取所有的比赛在谷歌表相邻列单元格

问题描述 投票:-1回答:2

问:找谷歌正则表达式表捕获[t- ]并输出到相邻列单元之间的字符串的所有实例作为一个数组,或火柴之间的一些其他的分隔符。

对于下面的字符串,我试图提取[t- ]之间的文本的所有实例。

A1:

Lorem存有[叔简直]中的[T-打印]的虚拟文本排版[C-行业],所以[D-它将使]感觉,

预期输出是在单个列中所有出现的数组:

乙1:

[简直是,印刷]

或输出可能是比赛出现任何分隔符

简直|印花

试图用一个单一的文本内[t- ]工作正常,但多个实例它提取第一次出现最后一次出现的[t-开放]之间的一切如下:

=REGEXEXTRACT(A1,"\[t- (.*)\]")

导致:

简直]!在[叔印刷的虚拟文本

我也试过多种捕获组,但如果我敢肯定有间[t- ]-有可能是每行n情况下只有两种文本的情况下,这只是工作。此外,它不输出结果在一列的arrary,但在多列之间传播:

=regexextract(A1, "(\[t- (.*)\]).*(\[t- (.*)\])" )


编辑:我已经收到了与正则表达式一对夫妇的答案,对于其他工具/语言(例如,PHP或JavaScript),而不是谷歌表的工作原理。这里的Google Sheets Regex Syntax

编辑2:将上述样品串具有内部标有其他字母,例如,[c- industry][d- it would make]括号其他文本。这些不应该被包括在内。只有在[t- ]发短信(以“T-”)应返回。

regex google-sheets google-sheets-formula re2
2个回答
2
投票

类似的技术用于here

  • REGEXREPLACE所有[t-.*](.*)
  • 从上面作为正则表达式来REGEXEXTRACT提供所产生的表达
  • \Q..\E用于转义其他字符 =REGEXEXTRACT(A1, "\Q"&REGEXREPLACE(A1,"\[t-[^]]+\]","\\E(.*)\\Q")&"\E")

另外,只需REGEXREPLACE界定,

=REGEXREPLACE(A1,"(^|\])(.*?)(\[t-|$)","$1|$3")
=SPLIT(REGEXREPLACE(A1,"(^|\])(.*?)(\[t-|$)","$1|$3"),"|")

替换所有字符.*

  • ]启动或串^的开始
  • [t-或字符串的结尾结束$

]|[t-


1
投票

防弹的解决方案:

="["&JOIN(", ", ARRAYFORMULA(REGEXREPLACE(
 QUERY(SPLIT(TRANSPOSE(SPLIT(A1, "[")), "]"), 
 "select Col1 where Col1 contains 't- '", 0), 
 "t- ", "")))&"]"

__________________________________________________________

=JOIN(" | ", ARRAYFORMULA(REGEXREPLACE(
 QUERY(SPLIT(TRANSPOSE(SPLIT(A1, "[")), "]"), 
 "select Col1 where Col1 contains 't- '", 0), 
 "t- ", "")))

© www.soinside.com 2019 - 2024. All rights reserved.