【发布时间】:2018-01-10 05:43:19
【问题描述】:
我目前在使用 Google 电子表格中的拆分和正则表达式时遇到了一些困难。我试图将单元格的内容分成一行,但只提取四个连续数字的序列(代表年份)并且只使用单元格公式(而不是函数)。最终,这个公式将适用于整个列,但我暂时将其限制为单个单元格。例如,给定一个包含内容的单元格“I2”:
2009;国会图书馆; 1939-1945; 1984 年第 23 次; 16
我需要一个结果(放在“J2、K2、L2、M2 等”中),例如:
2009 1939 1945 1984
尽管分号之间的条目数量从一个到多个不等,但这个示例单元格在我所知道的可能出现的各种可能性中具有代表性。到目前为止,在我自己的尝试中,我最终得到了两个接近我需要的公式,但都达不到要求。
1) 第一个公式为:
=ArrayFormula(SPLIT(SUBSTITUTE(REGEXREPLACE(I$2, "[^\d\-\;]", ""),"-", ";"), ";"))
实现(在“J2,K2,L2,M2,N2”中):
2009 1939 1945 231984 16
2) 第二个公式是:
=ArrayFormula(SPLIT(SUBSTITUTE(REGEXREPLACE(REGEXREPLACE(I$2, "[^\d]", ";"), "[^\d\-\;]", ""),"-", ";"), ";"))
这让我(在“J2、K2、L2、M2、N2、O2”中):
2009 1939 1945 23 1984 16
我一直在想办法用“\d{4}”来限制公式的返回,但到目前为止我所做的组合或更改都没有成功。有没有人有任何见解可以解决这个问题?
【问题讨论】:
-
谷歌正则表达式有单词边界标记吗?如果是这样,则使用模式
\b\d{4}\b -
到目前为止,我还没有遇到任何关于 Google 使用单词边界标记的能力的参考,不;我认为那也可以。我只是尝试再次用您的建议替换某些部分,但它返回了错误。根据上述公式,您想到了对 "\b\d{4}\b" 的哪些特殊更改?
-
在 Excel 中,数组公式可以返回值数组。所以我会认为在
Sheets中,ArrayFormula(REGEXEXTRACT(your_string,"\b\d{4}\b"))之类的东西会返回一个包含所有四位数匹配的数组。但是,我不熟悉Sheets,除了第一场比赛外,我无法让它返回。哦,\b令牌在Sheets使用的RE文档中列为可用。所以问题似乎是返回所有匹配项,而不仅仅是第一个匹配项。 -
找到了一种使用
REGEXEXTRACT返回所有匹配项的方法。与 Excel 相比,它似乎很麻烦,但请参阅下面的答案。
标签: regex split google-sheets formulas