我使用Google表格正则表达式公式在单元格 A1
中说'm trying to get the list of all digits preceding a hyphen in a given string (let' s:
=REGEXEXTRACT(A1, "\d-")
我的问题是它只返回第一场比赛...... how can I get all matches?
示例文字:
"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
)来实现所需的结果,但我真正想知道的是如何在“ REGEX.*
" Google Sheets formula. Something like the " g lobal”中获取re2正则表达式以返回此类多个匹配项 . regex101.com上的“首次匹配后返回”选项
我也尝试用 REGEXREPLACE
删除不需要的文本,也没有成功(我无法摆脱不在连字符之前的其他数字) .
任何帮助赞赏!谢谢 :)
4 回答
实际上,您可以使用regexreplace在单个公式中执行此操作,以使用捕获组包围所有值,而不是替换文本:
基本上它所做的是用"capture group"围绕
\d-
的所有实例然后使用正则表达式提取,它整齐地返回所有捕获 . 如果你想将它连接回一个字符串,你可以使用join将它打包回一个单元格:编辑
我提出了更一般的解决方案:
=regexreplace(A1,"(.)?(\d-)|(.)","$2")
我无法获得为我的案件工作的公认答案 . 我想这样做,但需要一个快速的解决方案,并采取以下措施:
输入:
预期产量:
式:
这似乎工作,我试图验证它 .
逻辑是
(1)替换字母后跟连字符
(2)替换任何没有连字符的数字
(3)替换所有不是数字或连字符的东西
结果
Analysis
我不得不在程序上逐步说服自己这是正确的 . 根据this reference,当管道符号分隔的替代品时,正则表达式应按从左到右的顺序匹配它们 . 除非规则1首先出现,否则上述公式无法正常工作(否则,在规则(1)可以发挥作用之前,它会将除数字或连字符之外的所有字符减少为null,并且从"Patho-jour"获得额外的连字符) .
以下是我认为必须处理文本的一些示例