将所有匹配项提取到 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"®EXREPLACE(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- ", "")))
问题:寻找 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"®EXREPLACE(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- ", "")))