将所有匹配项提取到Google表格中的相邻列单元格

时间:2019-02-03 18:35:50

标签: regex google-sheets google-sheets-formula re2

问题:寻找可捕获[t- ]之间的字符串的所有实例并将其作为数组或匹配项之间的其他分隔符输出到相邻列单元格的Google表格正则表达式。

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

A1:

  

Lorem Ipsum [t-简单] [t-印刷] 的伪文本并排版[c-industry],因此[d-它将使]感觉到

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

B1:

  

[简单来说就是打印]

或者输出可以是匹配项的任何定界符

  

很简单|打印

尝试使用[t- ]中的单个文本进行以下操作很好,但是对于多个实例,它将提取首次出现的打开[t-和最后一次出现的]之间的所有内容:

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

前往:

  

简单地]! [t-print

的伪文本

我也尝试了多个捕获组,但这仅在我确定[t- ]之间只有两个文本实例的情况下有效—每行可能有n个实例。另外,它不会在一列中输出结果,而是分布在多列中:

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


编辑:我收到了一些正则表达式的答案,这些答案可用于其他工具/语言(例如PHP或Javascript),但不适用于Google表格。这是Google Sheets Regex Syntax

编辑2 :上面的示例字符串在方括号内还有其他文本,并用其他字母标记,例如[c- industry][d- it would make]。这些应该包括在内。仅返回[t- ]中的文本(带有“ t-”)。

2 个答案:

答案 0 :(得分: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 :(得分: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- ", "")))