【发布时间】:2017-09-11 22:41:34
【问题描述】:
我正在尝试使用 Google 表格正则表达式公式获取给定字符串中连字符之前的所有数字的列表(假设在单元格 A1 中):
=REGEXEXTRACT(A1, "\d-")
我的问题是它只返回第一个匹配项...我怎样才能获得所有匹配项?
示例文本:
"A1-Nutrition;A2-ActPhysiq;A2-BioMeta;A2-Patho-jour;A2-StgMrktg2;H2-Bioth2/EtudeCas;H2-Bioth2/Gemmo;H2-Bioth2/Oligo;H2-Bioth2/Opo;H2-Bioth2/Organo;H3-Endocrino;H3-Génétiq"
我的公式返回1-,而我想得到1-2-2-2-2-2-2-2-2-2-3-3-(作为数组或连接文本)。
我知道我可以使用脚本或其他函数(如 SPLIT)来实现所需的结果,但我真正想知道的是如何获得 re2 正则表达式以在 "@ 987654328@" 谷歌表格公式。
类似于regex101.com
我还尝试使用 REGEXREPLACE 删除不需要的文本,但也没有成功(我无法删除没有连字符前的其他数字)。
任何帮助表示赞赏! 谢谢:)
【问题讨论】:
-
我认为你很幸运。文档说只返回第一个......
-
@dawg 谢谢,我同意,但我认为必须有一种方法来定义正确的正则表达式以获得所有匹配项;例如,如果我使用
((\d-)),我得到前两个匹配项,(((\d-)))我得到前三个匹配项,但是如何获得所有匹配项,不知道有多少?也许使用组名\1,允许任何由.*分隔的匹配重复......或者至少通过组合多个REGEXEXTRACT和/或REGEXREPLACE公式。 -
我尝试使用
(?g),它适用于一些re口味,但恐怕不适用于re2。这是一个很好的问题。 -
我喜欢使用捕获组的两个答案。更简单的是, =regexreplace(A1,"(\d-)|.","$1") 似乎可以工作。
-
是的,我认为
=regexreplace(A1,"(\d-)|.","$1")是迄今为止最好的,谢谢!简单高效:)
标签: regex google-sheets re2