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

Extract all matches to neighboring column cell in Google Sheets

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

对于以下字符串,我试图提取 [t- ].

之间的所有文本实例

A1:

Lorem Ipsum [t- is simply] dummy text of the [t- printing] and typesetting [c- industry], so [d- it would make] sense that

预期输出是单个列中所有事件的数组:

B1:

[is simply, printing]

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

is simply | printing

使用 [t- ] 中的单个文本尝试以下操作正常,但对于多个实例,它会提取第一次出现的 [t- 和最后一次出现的 ] 之间的所有内容:

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

导致:

is simply]! dummy text of the [t- printing

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

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


编辑:我收到了几个适用于其他 tools/languages(例如,PHP 或 Javascript)的正则表达式的答案但不是 Google 张。这是 Google Sheets Regex Syntax.

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

类似于使用的技术

  • REGEXREPLACE 所有 [t-.*](.*)
  • 将上面的结果表达式作为正则表达式提供给 REGEXEXTRACT
  • \Q..\E用于转义其他字符

    =REGEXEXTRACT(A1, "\Q"&REGEXREPLACE(A1,"\[t-[^]]+\]","\E(.*)\Q")&"\E")
    

或者,只用REGEXREPLACE来分隔,

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

替换

的所有字符 .*
  • ] 或字符串开头 ^
  • [t- 结束或字符串结束 $

]|[t-

防弹解决方案:

="["&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- ", "")))